2016-07-06 48 views
2

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

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

我写

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

它的工作原理很好的ABC(DEF ),但在没有括号时输出“ABC”。

+0

见http://ideone.com/pq2NmX –

+0

您还可以使用stringr' str_match(X,“\\(([^()] *)\\)”)' –

回答

0

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

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

查看IDEONE demo

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

此外,stringrstr_match也适合完成这个任务:

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

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