Здравый смысл и проверка здравомыслия с помощью gregexpr()
показывают, что нижеприведенные утверждения look-behind и look-ahead должны соответствовать одному местоположению в 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
на одно место при использовании утверждения lookbehind, но в двух местах - втором из которых кажется неправильным - при использовании утверждения lookahead.
strsplit(testString, BB, perl=TRUE)
# [[1]]
# [1] "text XX " "text"
strsplit(testString, FF, perl=TRUE)
# [[1]]
# [1] "text" " " "XX text"
У меня есть два вопроса: (Q1) Что здесь происходит? И (Q2), как можно лучше strsplit()
вести себя?
Обновление: Отличный ответ Теодора Литраса объясняет, что происходит, и поэтому адресует (Q1). Мой ответ основывается на нем, чтобы определить средство, адресованное (Q2).