R - 使用grep和gsub在同一(字符)向量元素中返回多个匹配项

时间:2012-11-30 12:20:37

标签: r grep

想象一下,我们想要找到下面字符串中的所有FOO和后续数字,并将它们作为向量返回(对于不可读性道歉,我想说明在FOO之前和之后没有规则模式):

xx <- "xasdrFOO1921ddjadFOO1234dakaFOO12345ndlslsFOO1643xasdf"

我们可以使用它来查找其中一个(取自1

gsub(".*(FOO[0-9]+).*", "\\1", xx)
[1] "FOO1643"

但是,我想将所有这些作为向量返回。

我已经想过使用strplit()和gregexpr()这样做的复杂方法 - 但我觉得有一种更好(更简单)的方式。

3 个答案:

答案 0 :(得分:5)

您可能对regmatches

感兴趣
> regmatches(xx, gregexpr("FOO[0-9]+", xx))[[1]]
[1] "FOO1921"  "FOO1234"  "FOO12345" "FOO1643" 

答案 1 :(得分:3)

xx <- "xasdrFOO1921ddjadFOO1234dakaFOO12345ndlslsFOO1643xasdf"
library(stringr)
str_extract_all(xx, "(FOO[0-9]+)")[[1]]
#[1] "FOO1921"  "FOO1234"  "FOO12345" "FOO1643" 

这也可以采用字符串向量,匹配将在列表元素中。

答案 2 :(得分:2)

版本略短。

library(gsubfn)
strapplyc(xx,"FOO[0-9]*")[[1]]