有没有一种简单的方法来获取R中的子字符串?

有没有一种简单的方法来获取R中的子字符串?,r,R,我通过以下方式获得word的子字符串: word="xyz9874" pattern="[0-9]+" x=gregexpr(pattern,word) substr(word,start=x[[1]],stop=x[[1]]+attr(x[[1]],"match.length")-1) [1] "9874" 有没有更简单的方法来获得R中的结果?当然,使用gsub和反向引用: gsub( ".*?([0-9]+).*", "\\1", word ) 说明:在大多数正则表达式实现中,\

我通过以下方式获得word的子字符串:

 word="xyz9874"
 pattern="[0-9]+"
 x=gregexpr(pattern,word)
 substr(word,start=x[[1]],stop=x[[1]]+attr(x[[1]],"match.length")-1)
[1] "9874"

有没有更简单的方法来获得R中的结果?

当然,使用
gsub
和反向引用:

gsub( ".*?([0-9]+).*", "\\1", word )
说明:在大多数正则表达式实现中,
\1
是对匹配的第一个子模式的反向引用。子模式用括号括起来。在R中,无论使用何种类型的引号,都需要转义反斜杠

问号,一种“扩展”正则表达式的习惯用法,意味着给定的正则表达式模式不应该贪婪,换句话说,它应该尽可能少地占用字符串。否则,模式
*([0-9]+)
中的
*
将匹配
xyz987
([0-9]+)
将匹配
4
。或者,我们可以写作

gsub( ".*[^0-9]+([0-9]+).*", "\\1", word )
但是,如果字符串以数字开头,则会出现问题

顺便说一下,请注意,您可以编写
\d
,或者实际上是
\\d
,而不是
[0-9]

gsub( ".*?(\\d+).*", "\\1", word )