здравый смысл и здравомыслие проверка с использованием gregexpr()
показывают, что внешний вид-сзади и смотреть вперед утверждения ниже, должны каждый матч ровно в одном месте в testString
:Почему strsplit использует положительные выражения lookback и lookbehind по-разному?
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()
, чтобы лучше себя вести?
Обновление: отличный ответ Теодора Lytras' объясняет, что происходит, и поэтому адрес (Q1). Мой ответ основывается на его определении средства защиты, обращаясь к (Q2).
FYI , есть несколько смежная дискуссия о том, почему 'stringr :: str_split' ведет себя иначе по отношению к' strsplit' по адресу https://github.com/hadley/stringr/pull/23 – hadley