带和不带空格的 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
我试图找到所有包含 '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