【发布时间】:2014-09-12 02:56:48
【问题描述】:
我已经搜索到可以找到这个forum discussion来实现重叠匹配的效果。
我还发现了以下SO 问题,谈到查找索引以执行此任务,但无法找到任何关于在 R 语言中抓取重叠匹配项的简明内容。
我可以在支持 (PCRE) 的大多数语言中执行此任务,方法是使用肯定的前瞻断言,同时在前瞻内实现捕获组以捕获重叠匹配。
但是,虽然实际上以与我在其他语言中相同的方式执行此操作,在 R 中使用 perl=T,但没有结果。
> x <- 'ACCACCACCAC'
> regmatches(x, gregexpr('(?=([AC]C))', x, perl=T))[[1]]
[1] "" "" "" "" "" "" ""
同时使用 stringi 和 stringr 包也是如此。
> library(stringi)
> library(stringr)
> stri_extract_all_regex(x, '(?=([AC]C))')[[1]]
[1] "" "" "" "" "" "" ""
> str_extract_all(x, perl('(?=([AC]C))'))[[1]]
[1] "" "" "" "" "" "" ""
执行此操作时应返回的正确结果是:
[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
编辑
我很清楚
regmatches不能很好地处理捕获的匹配,但是究竟 是什么导致了正则匹配中的这种行为,为什么没有返回结果? 我正在寻找一个比较详细的答案。stringi和stringr包是否无法在regmatches上执行此操作?请随时添加到我的答案中或提出与我发现不同的解决方法。
【问题讨论】:
标签: regex r string dna-sequence stringi