R语言中统计字符串重叠子串出现次数的问题求助
解决R语言中重叠子串的统计问题
你遇到的问题是因为stringr和stringi里的这些字符串匹配函数,默认都是非重叠匹配模式。
拿AAAA匹配AAA来说,第一次匹配到位置1-3的AAA后,函数会把指针移到第4个字符的位置,剩下的单个A没法再匹配AAA,所以返回结果是1,而不是你想要的2。
要统计这种重叠的子串,得用正向零宽预查的正则写法,它不会“消耗”匹配到的字符,指针会留在原地,这样就能让后续的重叠匹配也被统计到。
具体实现代码
- 用
stringr统计次数:
stringr::str_count(string = "AAAA", pattern = "(?=AAA)")
返回结果:[1] 2
- 用
stringi统计次数:
stringi::stri_count(str = "AAAA", regex = "(?=AAA)")
返回结果:[1] 2
- 提取所有重叠的子串:
stringr::str_extract_all("AAAA", "(?=(AAA))\\1")
返回结果:[[1]] [1] "AAA" "AAA"
内容的提问来源于stack exchange,提问作者fugu
相关产品推荐
相关产品推荐

