常识和使用健全性检查gregexpr()表明,下面的后视和前瞻断言应该恰好在以下位置匹配testString:
testString <- "text XX text"
BB <- "(?<= XX )"
FF <- "(?= XX )"
as.vector(gregexpr(BB, testString, perl=TRUE)[[1]])
# [1] 9
as.vector(gregexpr(FF, testString, perl=TRUE)[[1]][1])
# [1] 5
Run Code Online (Sandbox Code Playgroud)
strsplit()但是,使用这些匹配位置的方式不同,testString在使用lookbehind断言时在一个位置分割,但在使用前瞻断言时在两个位置 - 第二个看起来不正确 - .
strsplit(testString, BB, perl=TRUE)
# [[1]]
# [1] "text XX " "text"
strsplit(testString, FF, perl=TRUE)
# [[1]]
# [1] "text" " " "XX text"
Run Code Online (Sandbox Code Playgroud)
我有两个问题:(Q1)这里发生了什么?并且(Q2)如何才能strsplit()更好地表现?
更新: Theodore Lytras的优秀答案解释了发生了什么,以及地址(Q1).我的答案建立在他的基础上,以确定一个补救措施,解决(Q2) …