带和不带空格的 b 之前的正则表达式 a

regex a before b with and without whitespaces

我试图找到所有包含 'true' 的字符串,但前面没有 'act'。

可能向量的示例:

vector = c("true","trueact","acttrue","act true","act really true")

我目前的情况是这样的:

grepl(pattern="(?<!act)true", vector, perl=T, ignore.case = T)
[1]  TRUE  TRUE FALSE  TRUE  TRUE

我想要的是

[1]  TRUE  TRUE FALSE  FALSE  FALSE  

可能是这样的 - 即当 'act' 作为前面的子字符串时 SKIP 匹配,否则匹配 true

grepl("(act.*true)(*SKIP)(*FAIL)|\btrue", vector, 
     perl = TRUE, ignore.case = TRUE)
[1]  TRUE  TRUE FALSE FALSE FALSE

这是一种方法:

grepl(pattern="^(.(?<!act))*?true", vector, perl=T, ignore.case = T)
[1]  TRUE  TRUE FALSE FALSE FALSE

  • ^: 字符串的开始
  • .:匹配任意字符
  • (?<=):负向回顾
  • act:匹配 act
  • *?:在 0 到无限次之间匹配 .(?<!act)
  • true:匹配真

有关正则表达式演示,请参阅 here