在模式之后提取值

时间:2011-03-24 01:45:56

标签: r

初学者问题......

我有一个这样的清单:

x <- c("aa=v12, bb=x21, cc=f35", "xx=r53, bb=g-25, yy=h48", "nn=u75, bb=26, gg=m98")

(但更多行)

我需要提取“bb =”和“,”之间的内容。即我想要:

x21  
g-25  
26  

在这里阅读了很多类似的问题,我认为它应该是str_extract我应该使用的字符串,但不知怎的,我无法让它工作。感谢您的帮助。

/克里斯

4 个答案:

答案 0 :(得分:4)

gsubfn包中的

strapply可以做到这一点。请注意,[^,]*匹配一串非逗号。

strapply提取后引用部分(括号内的部分):

> library(gsubfn)
> strapply(x, "bb=([^,]*)", simplify = TRUE)
[1] "x21"  "g-25" "26"  

如果有多个x向量,则在这样的列表中提供它们:

> strapply(list(x, x), "bb=([^,]*)")
[[1]]
[1] "x21"  "g-25" "26"  

[[2]]
[1] "x21"  "g-25" "26"

答案 1 :(得分:2)

使用regexpr的选项:

> temp = regexpr('bb=[^,]*', x)
> substr(x, temp + 3, temp + attr(temp, 'match.length') - 1)
[1] "x21"  "g-25" "26"  

答案 2 :(得分:1)

这是使用R中的基本正则表达式函数的一种解决方案。首先,我们使用strsplit来分割逗号。然后,我们使用grepl仅过滤以bb=gsub开头的项目,以提取bb=之后的所有字符。

> x <- c("aa=v12, bb=x21, cc=f35", "xx=r53, bb=g-25, yy=h48", "nn=u75, bb=26, gg=m98")
> y <- unlist(strsplit(x , ","))
> unlist(lapply(y[grepl("bb=", y)], function(x) gsub("^.*bb=(.*)", "\\1", x)))
[1] "x21"  "g-25" "26" 

如果您想要走这条路,看起来str_replace就是您所追求的功能:

> str_replace(y[grepl("bb=",y)], "^.*bb=(.*)", "\\1")
[1] "x21"  "g-25" "26"

答案 3 :(得分:1)

用逗号作为分隔符读取它并取第二列:

> x.split <- read.table(textConnection(x), header=FALSE, sep=",", stringsAsFactors=FALSE)[[2]] 
[1] " bb=x21"  " bb=g-25" " bb=26"  

然后删除“bb =”

> gsub("bb=", "", x.split ) 
[1] " x21"  " g-25" " 26"