问题:
当使用 re.findall 匹配正则表达式模式时,为什么它不检索所有重叠的匹配项?例如,在字符串“hello”中,为什么正则表达式 r'ww' 只匹配“he”和“ll”而不匹配“el”和“lo”?
答案:
默认情况下,re.findall 不会产生重叠匹配。要实现此目的,请使用前瞻断言,这是一个强大的正则表达式功能。
解决方案:
# Using a lookahead assertion matches = re.findall(r'(?=(\w\w))', 'hello') # Output: ['he', 'el', 'll', 'lo']
正则表达式中的 (?=...) 构造是前瞻断言。如果指定的模式立即出现在当前位置之后,则它匹配,但它不会消耗字符串中的任何字符。在这种情况下,它识别“hello”中的所有两个字符序列(“ww”),而不消耗任何字符。
解释:
以上是为什么're.findall”不返回重叠的正则表达式匹配,前瞻断言如何解决这个问题?的详细内容。更多信息请关注PHP中文网其他相关文章!