常識と健全性チェックを使用しgregexpr()
て、以下の後読みアサーションと先読みアサーションがそれぞれ の 1 つの場所で正確に一致する必要があることを示します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()
ただし、これらの一致位置は異なる方法で使用されます。後読みアサーションを使用する場合は1 つのtestString
場所で分割されますが、先読みアサーションを使用する場合は2 つの場所 (2 番目の場所は間違っているようです) で分割されます。
strsplit(testString, BB, perl=TRUE)
# [[1]]
# [1] "text XX " "text"
strsplit(testString, FF, perl=TRUE)
# [[1]]
# [1] "text" " " "XX text"
2 つの質問があります: (Q1)ここで何が起こっているのですか? そして(Q2)どうすれstrsplit()
ば行儀よくなることができますか?
更新: Theodore Lytras の優れた回答で何が起こっているかが説明されているため、(Q1)に対処します。私の答えは、(Q2)に対処する救済策を特定するために彼に基づいています。