正则表达式来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"