如何用Python正则表达式提取单词中所有连续5字符组合?
如何用正则提取字符串中所有连续重叠的5字符组合
嘿,我来帮你搞定这个问题~
首先得搞明白你原来的代码为啥只返回不重叠的结果:正则引擎默认是**“消耗式匹配”**——当它匹配到一段字符后,就会把这些字符标记为“已处理”,下一次匹配会从这段字符的末尾开始。比如你的例子里,"stackoverflow"的前5个字符"stack"被匹配后,引擎指针直接跳到第6个字符"o",所以下一次只能匹配从"o"开始的"overf",中间的重叠组合就被跳过了。
不过你的需求完全可以用正则实现,核心是用正向预查(Positive Lookahead),它的特点是「只检查条件,不消耗字符」,这样引擎指针就不会移动,能让我们从每个位置都检查后面的5个字符。
解决代码
import re word = "stackoverflow" result = re.findall(r"(?=(.....))", word) print(result)
运行这段代码,你就能得到期望的结果:['stack', 'tacko', 'ackov', 'ckove', 'kover', 'overf', 'verfl', 'erflo', 'rflow']
正则原理解释
(?=(.....))是正向肯定预查结构:(?=...)表示“检查当前位置后面是否存在符合...的内容”,但不会把这些内容标记为已匹配(也就是不消耗字符)。.....匹配任意5个字符(如果需要限定字符类型,可以换成\w{5}之类的规则)。- 把
.....放在括号里是为了捕获这个5字符组合,这样re.findall就能提取出我们需要的内容。
这样,正则引擎会从字符串的第一个字符位置开始,检查后面的5个字符并捕获,然后指针停在原位置,下一次匹配直接移动到下一个字符位置,重复这个过程,直到剩下的字符不足5个为止。
内容的提问来源于stack exchange,提问作者JordanJordan
相关产品推荐
相关产品推荐

