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

时间:2012-10-17 08:59:13

标签: 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中获得结果?

1 个答案:

答案 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 )