只获得R中匹配的字符串部分

时间:2010-12-27 13:28:59

标签: r string

R中的函数是否与正则表达式匹配并仅返回匹配的部分? 像grep -o这样的东西,所以:

> ogrep('.b.',c('abc','1b2b3b4'))
[[1]]
[1] abc

[[2]]
[1] 1b2 3b4

4 个答案:

答案 0 :(得分:8)

尝试stringr

library(stringr)
str_extract_all(c('abc','1b2b3b4'), '.b.')
# [[1]]
# [1] "abc"
# 
# [[2]]
# [1] "1b2" "3b4"

答案 1 :(得分:6)

你应该给Gabor Grothendieck写gsubfn包的支票:

 require(gsubfn)
#Loading required package: gsubfn
 strapply(c('abc','1b2b3b4'), ".b.", I)

#Loading required package: tcltk
#Loading Tcl/Tk interface ... done
[[1]]
[1] "abc"

[[2]]
[1] "1b2" "3b4"

这只是将身份函数I应用于模式的匹配。

答案 2 :(得分:5)

我需要将gregexpr与子字符串结合起来,我估计:

> s = c('abc','1b2b3b4')
> m = gregexpr('.b.',s)
> substring(s[1],m[[1]],m[[1]]+attr(m[[1]],'match.length')-1)
[1] "abc"
> substring(s[2],m[[2]],m[[2]]+attr(m[[2]],'match.length')-1)
[1] "1b2" "3b4"

返回的列表'm'具有匹配的开始和长度。循环遍历s以获取所有子字符串。

答案 3 :(得分:5)

我无法相信没人提到regmatches

x <- c('abc','1b2b3b4')
regmatches(x, gregexpr('.b.', x))

# [[1]]
# [1] "abc"

# [[2]]
# [1] "1b2" "3b4"

这让我很奇怪,两年半前没有regmatches存在吗?