【问题标题】:Remove anything within a pair of parentheses using gsub in R使用 R 中的 gsub 删除一对括号内的任何内容
【发布时间】:2011-08-14 14:27:02
【问题描述】:

假设我有如下字符串:

<a>b<c>

我想同时删除&lt;a&gt;&lt;c&gt;,但我不能使用gsub("&lt;.*&gt;","","&lt;a&gt;b&lt;c&gt;"),因为这也会删除b

我之前问过一个类似的问题,但转念一想,我认为我应该总体上学习如何处理这类问题。谢谢。

【问题讨论】:

  • 更通用的解决方案是使用解析器。除非您可以确定没有转义符号、每个符号都匹配、不会发生嵌套以及许多其他警告,否则最好使用解析器。关于正则表达式和 HTML 有一个非常著名的问题。虽然您没有提到 HTML,但看起来您可能正朝着 HTML 和 XML 等标记语言的方向前进。

标签: regex r


【解决方案1】:

不允许在括号之间的内容中使用右括号 &gt;

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

【讨论】:

    【解决方案2】:

    您可以使用非贪婪的正则表达式,例如。 /&lt;.*?&gt;/.

    这仅适用于简单的 HTML,并且很容易被颠覆。考虑以下 HTML,使用正则表达式无法轻松删除。

    <span title="Help > Index">
    

    【讨论】:

    • 不,不行> gsub("/<.>/","","b") [1] "b"
    • 你错过了一个'?'在正则表达式中。
    【解决方案3】:

    还有一个想法,通常在嘈杂的环境中非常有用(即,当它更接近于制作分词器时):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-11
      • 2023-03-21
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多