在R中使用gsub函数删除括号内的任何内容

5

Suppose I have string like below:

<a>b<c>

我想移除<a><c>,但我不能使用gsub("<.*>","","<a>b<c>"),因为这会同时移除b
我之前问过类似的问题,但仔细想想,我应该学习如何处理这种问题。谢谢。

1
更通用的解决方案是使用解析器。除非您可以确定没有转义符号,每个符号都匹配,不会发生嵌套和许多其他注意事项,否则最好使用解析器。关于正则表达式和HTML有一个非常著名的SO问题。虽然您没有提到HTML,但看起来您可能正在朝着像HTML和XML这样的标记语言的方向前进。 - Iterator
3个回答

11

不要允许在括号内的内容中出现闭合括号>

z <- "<a>b<c>"
gsub("<[^>]+>","",z)

5
您可以使用非贪婪正则表达式,例如 /<.*?>/
这仅适用于简单的HTML,并且可以很容易地被破坏。请考虑以下HTML,它不能轻松地使用正则表达式删除。
<span title="Help > Index">

gsub("/<.*>/","","<a>b<c>") [1] "<a>b<c>" - lokheart
3
你在正则表达式中漏掉了一个问号“?”。 - a'r

4

还有一个想法,在嘈杂的环境中通常非常有用(即当接近进行分词时):

strsplit("<a>b<c>",split='<|>')[[1]][3]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接