使用正则表达式

时间:2015-07-25 17:47:10

标签: regex r

我想知道是否有任何正则表达式可以向我解释这一点:

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:]没有?

2 个答案:

答案 0 :(得分:2)

[:digit:]不是有效的POSIX类。您需要在字符类中包含[:digit:]以匹配数字charcaters。所以它会是,

grepl("[[:digit:]]", tmp2)
  

为什么使用\\[[0-9]找到前两种情况

因为在至少一位数之前存在[

  

但是\\[[:digit:]没有?

我已经告诉[:digit:]不是匹配数字字符的POSIX类。 所以试试这个\\[[[:digit:]]

答案 1 :(得分:1)

第一个问题是因为在R POSIX中,字符类用双括号[[ ]]内的表达式表示。

你要说的第二个例子是在0到9之间匹配,这是用 A字符类(也称为字符集)实现的,它是由方括号括起的字符列表{{ 1}}以及与前一个(POSIX)类不同的概念。使用[ ]时,如果不添加双括号,则会出现相同的错误。