Стандарт regmatches
плохо работает с захваченными совпадениями (в частности, несколько захваченных совпадений в одной строке). И в этом случае, поскольку вы «сопоставляете» взгляд вперед (игнорируя захват), само совпадение имеет нулевую длину. Существует также функция regmatches()<-
, которая может это проиллюстрировать. Obseerve
x <- 'ACCACCACCAC'
m <- gregexpr('(?=([AC]C))', x, perl=T)
regmatches(x, m) <- "~"
x
# [1] "~A~CC~A~CC~A~CC~AC"
Обратите внимание, что все буквы сохранены, мы просто заменили места совпадений нулевой длины тем, что мы можем наблюдать.
Я создал regcapturedmatches () , которую я часто использую для таких задач. Например,
x <- 'ACCACCACCAC'
regcapturedmatches(x, gregexpr('(?=([AC]C))', x, perl=T))[[1]]
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
gregexpr
захватывает все данные просто отлично, поэтому вы можете извлечь его из этого объекта в любом случае, если вы предпочитаете не использовать эту вспомогательную функцию.