我进行了搜索,并找到了这个论坛讨论,以实现重叠匹配的效果。
我还发现以下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
那样执行此操作?请随意添加我的答案或提出一个与我发现的不同的解决方法。