senso comune e un sanity-check con gregexpr()
indicano che il look-behind e look-ahead affermazioni sottostanti devono ogni partita esattamente una posizione nella testString
:Perché strsplit usa un lookahead positivo e guarda le corrispondenze di asserzione in modo diverso?
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()
, tuttavia, utilizza quei luoghi partita in modo diverso, splitting a una posizione quando si utilizza l'asserzione lookbehind, ma a due posizioni - la seconda delle quali sembra errata - quando si utilizza l'asserzione lookahead.
strsplit(testString, BB, perl=TRUE)
# [[1]]
# [1] "text XX " "text"
strsplit(testString, FF, perl=TRUE)
# [[1]]
# [1] "text" " " "XX text"
Ho due domande: (1T) cosa sta succedendo qui? E (Q2) come si può comportarsi meglio con strsplit()
?
Update: risposta eccellente Theodore Lytras' spiega cosa sta succedendo, e così si rivolge (Q1). La mia risposta si basa su di lui per identificare un rimedio, indirizzandosi a (Q2).
FYI , c'è una discussione un po 'correlata sul perché stringr :: str_split' si comporta diversamente da 'strsplit' a https://github.com/hadley/stringr/pull/23 – hadley