0

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

xx <- "xasdrFOO1921ddjadFOO1234dakaFOO12345ndlslsFOO1643xasdf"

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

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

但是,我想将它们全部作为向量返回。

我想到了一种使用 strplit() 和 gregexpr() 的复杂方法——但我觉得有更好(更简单)的方法。

4

3 回答 3

6

您可能对以下内容感兴趣regmatches

> regmatches(xx, gregexpr("FOO[0-9]+", xx))[[1]]
[1] "FOO1921"  "FOO1234"  "FOO12345" "FOO1643" 
于 2012-11-30T12:27:26.447 回答
3
xx <- "xasdrFOO1921ddjadFOO1234dakaFOO12345ndlslsFOO1643xasdf"
library(stringr)
str_extract_all(xx, "(FOO[0-9]+)")[[1]]
#[1] "FOO1921"  "FOO1234"  "FOO12345" "FOO1643" 

这也可以采用字符串向量,并且数学将在列表元素中。

于 2012-11-30T13:00:58.850 回答
2

略短的版本。

library(gsubfn)
strapplyc(xx,"FOO[0-9]*")[[1]]
于 2012-11-30T13:47:32.987 回答