R正则表达式:" [:digit:]"

时间:2012-07-17 15:04:09

标签: regex r

我想从字符向量中提取以数字开头的元素,但是有一些关于POSIX正则表达式语法的东西,我不明白。

我会认为

vec <- c("012 foo", "305 bar", "other", "notIt 7")
grep(pattern="[:digit:]", x=vec)

会返回1 2 4,因为它们是位于其中某个位置的四个元素。但实际上它会返回3 4

同样grep(pattern="^0", x=vec)正如我所期望的那样返回1,因为元素1以零开头。但是grep(pattern="^[:digit:]", x=vec)返回integer(0),而我希望它返回1 2,因为这些是以数字开头的元素。

我如何误解语法?

3 个答案:

答案 0 :(得分:34)

尝试

grep(pattern="[[:digit:]]", x=vec)
而是因为冒号之间的'元模式'通常需要双括号。

答案 1 :(得分:12)

另一种解决方案

grep(pattern="\\d", x=vec)

答案 2 :(得分:5)

man 7 regex
  

在括号表达式中,“[:”和“:]”中的字符类名称代表属于该类的所有字符的列表。标准字符类名称为:

         alnum       digit       punct
         alpha       graph       space
         blank       lower       upper
         cntrl       print       xdigit

因此,作为括号表达式唯一成员的字符类看起来像双括号,例如[[:digit:]]。另外一个例子,请考虑[[:alnum:]]等同于[[:alpha:][:digit:]]