2016-07-06 81 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, "\\(([^()]*)\\)")