我试图使用多个lookahead来在R Perl类型的正则表达式中使用grep
模拟AND运算符。但是,我不理解我看到的输出。以下是一个示例代码块:
a <- c("abcxyz", "abcdef", "defxyz", "abcdefxyz", "xyzdefabc")
grep("(?<=abc)(?=xyz)", a, ignore.case=TRUE, perl=TRUE) # returns 1
grep("(?=abc)(?=xyz)", a, ignore.case=TRUE, perl=TRUE) # returns integer(0)
第二行表明字符串中的位置在abc和xyz之间,并匹配'abcxyz'。为什么它不匹配'abcdefxyz'?
在第三行中,我尝试输出1、4和5,但返回未找到。为什么会发生这种情况?
我正在使用下面的另一种解决方案,但我想使用lookaheads来处理多个lookaheads时的顺序。
grep("abc.*xyz|xyz.*abc", a, ignore.case=TRUE, perl=TRUE) # returns 1 4 5 as expected
?=
而不是?<=
。也许您需要使用grep("(?<=abc).*(?=xyz)", a, ignore.case=TRUE, perl=TRUE)
。 - akrun