【问题标题】:String Editing in R - Trouble with ParenthesesR中的字符串编辑 - 括号问题
【发布时间】:2013-06-27 07:09:05
【问题描述】:

所以我正在编辑 R 中的一些字符串,我想从字符串中删除括号中的所有内容。问题是,我对正则表达式不是很精通,而且似乎任何时候我想使用 gsub 来弄乱括号,它都不起作用,或者不会产生正确的结果。

有什么提示吗?我有一种感觉,这是一个可以解决的问题。可能有一个我可以使用的函数不是 gsub 吗?

例如。字符串:“abc def (foo) abc (def)”应该被剥离为“abc def abc”

如果这样做的唯一方法是指定括号中的内容,那也可以。

【问题讨论】:

  • 您尝试过的示例可以为您的问题增加价值。

标签: regex string r


【解决方案1】:

只是另一种方式:

x <- "abc def (foo) abc (def)"
gsub(" *\\(.*?)", "", x)

您需要在正则表达式中使用\ 转义(。在 R 中,您需要转义两次 \\。然后你以非贪婪的方式在( 之后搜索任何东西(.*),在.* 之后搜索?,然后是)(你不必逃避。

【讨论】:

  • 一个非常优雅的解决方案。
【解决方案2】:

括号通常是正则表达式中的特殊字符,在 R 中也是如此。您必须使用反斜杠 \ 将它们转义。问题是反斜杠也需要在 R 字符串中进行转义,使用第二个反斜杠,这会导致以下相当笨拙的构造:

gsub(" *\\([^)]*\\) *", " ", "abc def (foo) abc (def)")

注意空格,我的gsub 调用没有正确处理这些。

【讨论】:

    【解决方案3】:

    qdap 包中的bracketX 函数就是针对这个问题设计的:

    library(qdap)
    x <- "abc def (foo) abc (def)"
    bracketX(x, "round")
    
    ## > bracketX(x, "round")
    ## [1] "abc def abc"
    

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多