Нахождение индексов нескольких / перекрывающихся совпадающих подстрок
У меня есть строка, s="CCCGTGCC"
и подстрока ss="CC"
, Я хочу получить все индексы в s
что начало строки ss
, В моем примере я хотел бы получить обратно массив c(1,2,6)
,
Есть ли строковая функция, которая достигает этого? Обратите внимание, что моя строка находится в форме "CCCGTGCC"
, и не c("C","C","C","G","T","G","C","C")
,
grep
возвращает только то, есть ли совпадение где-либо в строке, а не индексы совпадений в строке, если я что-то не упустил.
1 ответ
Решение
Пытаться gregexpr
с perl=TRUE
и использовать регулярные выражения Perl с прогнозными утверждениями (см. ?regex
):
gregexpr("(?=CC)","CCCGTGCC",perl=TRUE)
[[1]]
[1] 1 2 7
attr(,"match.length")
[1] 0 0 0