正则表达式来pickout括号之间的一些文字

问题描述:

可能重复:
Extract info inside all parenthesis in R (regex)正则表达式来pickout括号之间的一些文字

我有一个字符串

DF

Peoplesoft(id-1290) 

我喜欢捕捉之间的字符父母例如,esis。我喜欢从上面的例子中得到id-1290。

我用这个:

x <- regexpr("\\((.*)\\)", df) 

这是给我的号码,如

[1] 10 

有没有一种简单的方法抢R中使用正则表达式parentesis之间的文本?

我更喜欢使用gsub()此:

gsub(".*\\((.*)\\).*", "\\1", df) 
[1] "id-1290" 

正则表达式是这样的:

  • 查找括号内的文字 - 不是你真正的括号,但我的额外集圆括号,即(.*)
  • 将此返回为返回参考,\\1

换句话说,替换字符串中的所有文本与背部参考


如果你想使用regexp而非gsub,那么这样做:

x <- regexpr("\\((.*)\\)", df) 
x 

[1] 11 
attr(,"match.length") 
[1] 9 
attr(,"useBytes") 
[1] TRUE 

这将返回一个值11,即找到的表达式的起始位置。并注意属性match.length,表明有多少个字符被匹配。

您可以attr提取此:

attr(x, "match.length") 
[1] 9 

然后用substring提取字符:

substring(df, x+1, x+attr(x, "match.length")-2) 
[1] "id-1290" 

这里有一个稍微不同的方式,采用回顾后/超前:

df <- "Peoplesoft(id-1290)" 
regmatches(df,gregexpr("(?<=\\().*?(?=\\))", df, perl=TRUE)) 

与安德烈的答案不同的是,这也是w orks提取括号中的多个字符串。例如:

df <- "Peoplesoft(id-1290) blabla (foo)" 
regmatches(df,gregexpr("(?<=\\().*?(?=\\))", df, perl=TRUE)) 

给出:

[[1]] 
[1] "id-1290" "foo"