我想知道是否有任何正则表达式可以向我解释这一点:
tmp2 <- c("alpha[1]", "be[3]ta", 'gam4ma')
grepl("[0123456789]", tmp2) #[1] TRUE TRUE TRUE
grepl("[0-9]", tmp2) #[1] TRUE TRUE TRUE
grepl("[:digit:]", tmp2) #[1] FALSE TRUE TRUE
grepl("\\[[:digit:]", tmp2) #[1] FALSE FALSE FALSE
grepl("\\[[0-9]", tmp2) #[1] TRUE TRUE FALSE
为什么使用[:digit:]
找不到alpha[1]
?
为什么使用\\[[0-9]
找到前两种情况,但\\[[:digit:]
没有?
答案 0 :(得分:2)
[:digit:]
不是有效的POSIX类。您需要在字符类中包含[:digit:]
以匹配数字charcaters。所以它会是,
grepl("[[:digit:]]", tmp2)
为什么使用
\\[[0-9]
找到前两种情况
因为在至少一位数之前存在[
。
但是
\\[[:digit:]
没有?
我已经告诉[:digit:]
不是匹配数字字符的POSIX类。
所以试试这个\\[[[:digit:]]
。
答案 1 :(得分:1)
第一个问题是因为在R POSIX中,字符类用双括号[[ ]]
内的表达式表示。
你要说的第二个例子是在0到9之间匹配,这是用 A字符类(也称为字符集)实现的,它是由方括号括起的字符列表{{ 1}}以及与前一个(POSIX)类不同的概念。使用[ ]
时,如果不添加双括号,则会出现相同的错误。