在R中的括号内提取信息

时间:2016-07-06 18:21:02

标签: regex r gsub

我有一些行,有些有括号,有些没有。与ABC(DEF)ABC一样。我想从括号中提取信息:

  • ABC(DEF) - > DEF
  • ABC - > NA

我写了

gsub(".*\\((.*)\\).*", "\\1",X).

它适用于ABC(DEF),但输出" ABC"当没有括号时。

1 个答案:

答案 0 :(得分:0)

如果您在使用正则表达式ABC时不想获得sub,则需要添加一个与所有非空字符串匹配的替代字符并将其删除。

X <- c("ABC(DEF)", "ABC")
sub(".*(?:\\((.*)\\)).*|.*", "\\1",X)
                       ^^^

请参阅IDEONE demo

请注意,您不必使用gsub,只需要执行一次替换即可,sub即可。

此外, stringr str_match对于此任务也很方便:

str_match(X, "\\((.*)\\)")

str_match(X, "\\(([^()]*)\\)")