我想从字符向量中提取以数字开头的元素,但是有一些关于POSIX正则表达式语法的东西,我不明白.
我想是的
vec <- c("012 foo", "305 bar", "other", "notIt 7")
grep(pattern="[:digit:]", x=vec)
Run Code Online (Sandbox Code Playgroud)
会返回1 2 4因为它们是其中包含数字的四个元素.但实际上它会回归3 4.
同样按照我的预期grep(pattern="^0", x=vec)返回1,因为元素1以零开头.但是grep(pattern="^[:digit:]", x=vec)返回,integer(0)而我希望它返回,1 2因为那些是以数字开头的元素.
我怎么会误解语法?
Dir*_*tel 34
尝试
grep(pattern="[[:digit:]]", x=vec)
Run Code Online (Sandbox Code Playgroud)
相反,冒号之间的"元模式"通常需要双括号.
man 7 regex
Run Code Online (Sandbox Code Playgroud)
在括号表达式中,"[:"和":]"中包含的字符类的名称代表属于该类的所有字符的列表.标准字符类名称是:
Run Code Online (Sandbox Code Playgroud)alnum digit punct alpha graph space blank lower upper cntrl print xdigit
因此,作为括号表达式唯一成员的字符类看起来像双括号,例如[[:digit:]].作为另一个例子,考虑[[:alnum:]]相当于[[:alpha:][:digit:]].