我已经搜索过并且能够找到此论坛讨论以实现重叠匹配的效果.
我还发现了以下SO问题,即找到索引来执行此任务,但是无法找到任何关于在R语言中抓取重叠匹配的简洁信息.
我可以在支持(PCRE)的大多数语言中通过使用正向前端断言执行此任务,同时在先行内部实现捕获组以捕获重叠的匹配.
但是,虽然实际执行此操作的方式与其他语言相同,但perl=T在R中使用时,结果不会产生.
> x <- 'ACCACCACCAC'
> regmatches(x, gregexpr('(?=([AC]C))', x, perl=T))[[1]]
[1] "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)
使用stringi和stringr包都是一样的.
> library(stringi)
> library(stringr)
> stri_extract_all_regex(x, '(?=([AC]C))')[[1]]
[1] "" "" "" "" "" "" ""
> str_extract_all(x, perl('(?=([AC]C))'))[[1]]
[1] "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)
执行此操作时应返回的正确结果是:
[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
Run Code Online (Sandbox Code Playgroud)
我很清楚,regmatches对于捕获的匹配不能很好地工作,但是在regmatches中究竟是什么导致了这种行为?为什么没有返回结果?我正在寻找一个有点详细的答案.
是stringi和 …