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

mbq*_*mbq 3 string r

R中是否有与regexp匹配的函数并仅返回匹配的部分?有点像grep -o,所以:

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

[[2]]
[1] 1b2 3b4
Run Code Online (Sandbox Code Playgroud)

had*_*ley 8

试试stringr:

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


42-*_*42- 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"
Run Code Online (Sandbox Code Playgroud)

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

  • 只需要添加一些小点:1.关于Tk regexp的注释,如果R安装具有tcltk功能但是支持R和perl regexp,gsubfn默认使用tcl regexp表达式.分别使用engine ="R"或perl = TRUE.关于我,请注意我实际上是AsIs函数.R中的身份函数只是:身份.3.在这种情况下,实际上可以省略第三个arg:strapply(c('abc','1b2b3b4'),".b.").4.如果你想重叠匹配,试试这个:strapply(c('abc','1b2b3b4'),".b(?=.)") (3认同)

Spa*_*man 5

我需要将gregexpr和substring结合起来,我估计:

> 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"
Run Code Online (Sandbox Code Playgroud)

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


lcn*_*lcn 5

我简直不敢相信regmatches!

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

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

# [[2]]
# [1] "1b2" "3b4"
Run Code Online (Sandbox Code Playgroud)

这让我很奇怪,regmatches两年半前不存在?