php中文网

Python正则匹配结果不符:分组非贪婪匹配为何少匹配字符?

php中文网

python 正则匹配存在差异的原因

使用分组非贪婪匹配进行正则表达式的匹配时,发现匹配结果与预期不符,少了 7 个字符。通过仔细观察发现,问题出现在匹配模式中。

正则表达式中的 .(点)表示匹配任意单个字符。在这种情况下,作者希望匹配像 forum/w33d580/ 这样的路径部分。然而,代码中使用了 r'http://tiebapic.baidu.com/(.+?)sign=.+?/(.+?).(.+?)' 模式,这里 .+? 匹配到的是任意数量的任意字符,包括 t 字符。

因此,匹配结果中缺少了最后的 .jpg,因为它被 t 字符替换掉了。为了解决此问题,需要转义点,即使用 . 替换 .。

立即学习“Python免费学习笔记(深入)”;

修改后的正则表达式:

pattern = re.compile(r'http://tiebapic.baidu.com/(.+?)sign=.+?/(.+).(.+?)?tbpicau=', re.s)

现在,匹配结果将是预期的:

forum/w33D580/9728d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg

以上就是Python正则匹配结果不符:分组非贪婪匹配为何少匹配字符?的详细内容,更多请关注php中文网其它相关文章!