我通过以下方式得到单词的子串:
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中获得结果?
答案 0 :(得分:3)
当然,请使用gsub
和反向引用:
gsub( ".*?([0-9]+).*", "\\1", word )
说明:在大多数正则表达式实现中,\1
是对匹配的第一个子模式的后引用。子模式括在括号中。在R中,无论您使用的引号类型如何,都需要转义反斜杠。
问号,“扩展”正则表达式的成语意味着给定的正则表达式模式不应该是贪婪的,换句话说 - 它应该尽可能少地使用字符串。 Othrewise,模式.*
中的.*([0-9]+)
匹配xyz987
,([0-9]+)
匹配4
。或者,我们可以写
gsub( ".*[^0-9]+([0-9]+).*", "\\1", word )
但是我们遇到以数字开头的字符串的问题。
请注意,您可以写[0-9]
,或者实际上\d
而不是\\d
:
gsub( ".*?(\\d+).*", "\\1", word )