Нахождение индексов нескольких / перекрывающихся совпадающих подстрок - PullRequest
15 голосов
/ 24 октября 2011

У меня есть строка, s="CCCGTGCC" и подстрока ss="CC". Я хочу получить все индексы в s, которые начинаются со строки ss. В моем примере я хотел бы получить обратно массив c(1,2,6).

Есть ли строковая функция, которая достигает этого? Обратите внимание, что моя строка имеет вид "CCCGTGCC", а не c("C","C","C","G","T","G","C","C").

grep возвращает только то, есть ли совпадение где-либо в строке, а не индексы совпадений в строке, если я что-то не упустил.

1 Ответ

28 голосов
/ 24 октября 2011

Попробуйте gregexpr с perl=TRUE и используйте регулярные выражения perl с прогнозными утверждениями (см. ?regex):

gregexpr("(?=CC)","CCCGTGCC",perl=TRUE)
[[1]]
[1] 1 2 7
attr(,"match.length")
[1] 0 0 0
...