1

我通过以下方式获取单词的子字符串:

 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 中得到结果?

4

1 回答 1

3

当然,使用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 )
于 2012-10-17T09:03:12.007 回答