R 查找多个/重叠匹配子字符串的索引

R 查找多个/重叠匹配子字符串的索引,r,regex,R,Regex,我有一个字符串,s=“CCCGTGCC”和一个子字符串ss=“CC”。我想获取s中所有开始字符串ss的索引。在我的示例中,我希望返回数组c(1,2,6) 有任何字符串函数可以实现这一点吗?请注意,我的字符串的格式是“CCCGTGCC”,而不是c(“c”、“c”、“c”、“G”、“T”、“G”、“c”、“c”) grep只返回字符串中是否有匹配项,而不返回字符串中匹配项的索引,除非我遗漏了什么 使用perl=TRUE尝试gregexpr,并使用带有前瞻断言的perl正则表达式(请参见?regex)

我有一个字符串,
s=“CCCGTGCC”
和一个子字符串
ss=“CC”
。我想获取
s
中所有开始字符串
ss
的索引。在我的示例中,我希望返回数组
c(1,2,6)

有任何字符串函数可以实现这一点吗?请注意,我的字符串的格式是
“CCCGTGCC”
,而不是
c(“c”、“c”、“c”、“G”、“T”、“G”、“c”、“c”)


grep
只返回字符串中是否有匹配项,而不返回字符串中匹配项的索引,除非我遗漏了什么

使用
perl=TRUE
尝试
gregexpr
,并使用带有前瞻断言的perl正则表达式(请参见
?regex
):


你的意思是数组[1,2,7](实际上是R中的一个向量)?
gregexpr
是你正在寻找的函数,但是regexp引擎“吞咽”了标记,所以“CCC”被算作一个“CC”和一个“C”,尽管一些巧妙的使用regexp可能会抵消这一点。注意,代码:substring(“abcde”,1:5)打断字符串“abcde”进入字符向量并粘贴((子字符串(“abcde”,1:5,1:5)),collapse=“”)做opositeMeh,我被卡住了,但没有想到“向前看”。我想知道pattern=“CC”为什么不起作用…@RomanLuštrik:请参阅James对OP的评论。如果找到匹配项,它将从正在搜索的字符串的其余部分中删除。请注意,
“match.length”
为零(如果
pattern=“CC”
,则为2)。+1用于澄清有关前瞻断言的
“match.length”
的注释。我从来没有想过用这种方式。
gregexpr("(?=CC)","CCCGTGCC",perl=TRUE)
[[1]]
[1] 1 2 7
attr(,"match.length")
[1] 0 0 0