正则匹配存在差异的原因
使用分组非贪婪匹配进行正则表达式的匹配时,发现匹配结果与预期不符,少了 7 个字符。通过仔细观察发现,问题出现在匹配模式中。
正则表达式中的 .(点)表示匹配任意单个字符。在这种情况下,作者希望匹配像 forum/w33d580/ 这样的路径部分。然而,代码中使用了 r’http://tiebapic.bdu.com/(.+?)sign=.+?/(.+?).(.+?)’ 模式,这里 .+? 匹配到的是任意数量的任意字符,包括 t 字符。
因此,匹配结果中缺少了最后的 .jpg,因为它被 t 字符替换掉了。为了解决此问题,需要转义点,即使用 . 替换 .。
立即学习“”;
修改后的正则表达式:
pattern = re.compile(r'http://tiebapic.baidu.com/(.+?)sign=.+?/(.+).(.+?)?tbpicau=', re.s)
登录后复制
现在,匹配结果将是预期的:
forum/w33D580/9728d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg
登录后复制
以上就是Python正则匹配结果不符:分组非贪婪匹配为何少匹配字符?的详细内容,更多请关注php中文网其它相关文章!