有没有一种简单的方法来获取R中的子字符串?
我通过以下方式获得word的子字符串:有没有一种简单的方法来获取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="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 )