常识和使用的健全性检查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"
我有两个问题:(问题1)这是怎么回事?和(Q2)怎么能得到strsplit()得到更好的表现?
更新: Theodore Lytras的出色答案解释了正在发生的事情,因此可以解决(Q1)。我的答案建立在他确定解决方法(Q2)的基础上。
扬帆大鱼
大话西游666
catspeake