我想从字符向量中提取以数字开头的元素,但是有一些关于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
,因为这些是以数字开头的元素。
我如何误解语法?
答案 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:]]
。