我通过以下方式获取单词的子字符串:
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 中得到结果?
我通过以下方式获取单词的子字符串:
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 )
但是我们遇到了以数字开头的字符串的问题。
顺便说一句,请注意,[0-9]
您可以写\d
,或者,实际上,\\d
:
gsub( ".*?(\\d+).*", "\\1", word )