我有一个字符串s="CCCGTGCC"和一个子字符串ss="CC".我希望得到所有索引,s然后启动字符串ss.在我的例子中,我想要取回数组c(1,2,6).
是否有任何字符串功能可以实现这一目标?请注意,我的字符串是在表单中"CCCGTGCC",而不是c("C","C","C","G","T","G","C","C").
grep 只返回字符串中是否有匹配项,而不是字符串中匹配项的索引,除非我遗漏了某些内容.
Karl Broman的帖子:https://kbroman.wordpress.com/2015/06/22/randomized-hobbit-2/ 让我玩正则表达式和ngrams只是为了好玩.我试图用正则表达式提取2克.我知道有解析器可以做到这一点,但我对正则表达式逻辑感兴趣(即,这是一个我无法满足的自我挑战).
下面我给出一个最小的例子和所需的输出.我尝试的问题是2折:
克(单词)被吃掉了,下次通过时无法使用. 如何让它们可用于第二次传递?(例如,我希望在之前已被消费之后like可用)like toastI like
我无法在未捕获的单词之间创建空格(即使我使用过,也请注意输出中的尾随空格(?:\\s*)). 如何在第n个(在本例中为第二个)单词中捕获尾随空格?我知道这可以简单地完成:"(\\b[A-Za-z']+\\s)(\\b[A-Za-z']+)"对于2克但我想将解决方案扩展到n-gram.PS我知道,\\w但我不认为下划线和数字是单词部分,但请考虑'作为单词部分.
MWE:
library(stringi)
x <- "I like toast and jam."
stringi::stri_extract_all_regex(
x,
pattern = "((\\b[A-Za-z']+\\b)(?:\\s*)){2}"
)
## [[1]]
## [1] "I like " "toast and "
Run Code Online (Sandbox Code Playgroud)
期望的输出:
## [[1]]
## [1] "I like" "like toast" "toast and" "and jam"
Run Code Online (Sandbox Code Playgroud) 我陷入了正常的表达.我通常使用这行代码来查找字符串中重叠的重复:
gregexpr("(?=ATGGGCT)",text,perl=TRUE)
[[1]]
[1] 16 45 52 75 203 210 266 273 327 364 436 443 480 506 534 570 649
attr(,"match.length")
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
attr(,"useBytes")
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
现在我想给gregexpr一个包含在变量中的模式:
x="GGC"
Run Code Online (Sandbox Code Playgroud)
当然,如果我传递变量x,gregexpr将要搜索"x"而不是变量包含的内容
gregexpr("(?=x)",text,perl=TRUE)
[[1]]
[1] -1
attr(,"match.length")
[1] -1
attr(,"useBytes")
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
gregexpr在这种积极展望的情况下,如何将变量传递给我?
我有类似的字符串
'abbb'
Run Code Online (Sandbox Code Playgroud)
我需要了解有多少次我能找到子串'bb'.
grep('bb','abbb')
Run Code Online (Sandbox Code Playgroud)
回报1.因此,答案是2(a-bb和ab-bb).我怎样才能按照我需要的方式计算出现次数?