如何使用re.findall提取字符串中的目标重复匹配组?
解决方法
你的问题出在正则的匹配范围没有明确限定,导致非贪婪匹配提前终止。可以通过正向预查来指定每个匹配项的结束边界,修正后的正则如下:
import re text = 'change of use of fidg to idvr change of use ohdgt to ousd' result = re.findall(r'(change of use .*?) (to .*?)(?= change of use|$)', text) print(result)
输出结果:
[('change of use of fidg', 'to idvr'), ('change of use ohdgt', 'to ousd')]
正则说明
(change of use .*?):匹配以"change of use"开头的内容,非贪婪模式确保不会过度匹配到下一个条目。(to .*?):匹配以"to"开头的目标内容,同样用非贪婪模式避免越界。(?= change of use|$):正向预查,指定匹配的结束边界——要么遇到下一个"change of use",要么到字符串末尾,确保两个独立条目被正确分割。
原正则的问题
你之前的'(change of use .*?) (to .*?)'没有限定to .*?的结束位置,非贪婪匹配会在遇到第一个空格时停止,导致第二个组只匹配到'to'而非完整的'to idvr',同时无法区分两个独立的条目。
内容的提问来源于stack exchange,提问作者Alice Wang
相关产品推荐
相关产品推荐

