在R中提取括号内的信息

Extract info inside parenthesis in R

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

我写了

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

它对 ABC(DEF) 有效,但是当没有括号时输出 "ABC"。

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

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

参见IDEONE demo

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

此外,stringr str_match 也可以方便地完成此任务:

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

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

使用 string_extract() 即可。

library(stringr) 

df$`new column` <- str_extract(df$`existing column`,  "(?<=\().+?(?=\))")

这会在现有列的括号内创建一个包含任何文本的新列。如果列中没有括号,则填NA。

我的回答灵感来自this answer on the original question about this topic