我正嘗試使用多個lookahead來模擬R運算符Perl類型爲grep
的正則表達式。但是,我不明白我看到的輸出。這是一個示例碼塊在R正則表達式中瞭解lookahead
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,但它沒有找到。這是爲什麼發生?
我正在使用下面的替代解決方案,但是我想在處理多個lookahead時使用lookahead來處理排序。
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
@akrun我試圖避免使用回頭看,它強制執行一個我不想要的命令。我編輯了示例代碼以使其更清晰。我的期望是從這個例子:http://www.rexegg.com/regex-lookarounds.html – Naumz