常识和完整性检查使用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
strsplit()
然而,使用这些匹配位置的方式不同,使用后向断言时testString
在一个位置拆分,但在使用前瞻断言时在两个位置 - 其中第二个位置似乎不正确。
strsplit(testString, BB, perl=TRUE)
# [[1]]
# [1] "text XX " "text"
strsplit(testString, FF, perl=TRUE)
# [[1]]
# [1] "text" " " "XX text"
我有两个问题:(Q1)这是怎么回事?以及(Q2)如何才能strsplit()
表现得更好?
更新: Theodore Lytras 的出色回答解释了发生了什么,因此地址(Q1)。我的答案建立在他确定补救措施的基础上,地址为(Q2)。