python 正则非贪婪匹配结果缺失的原因
针对题主的问题:“为什么python 正则匹配时,使用分组非贪婪匹配却丢失了7个字符?”,我们分析代码进行解答。
代码中使用的正则表达式为:
r'http://tiebapic.baidu.com/(.+?)sign=.+?/(.+?).(.+?)?tbpicau='
登录后复制
其中的 (.+?) 表达式使用非贪婪模式,匹配任意数量的字符,直到遇到 sign. 按照题主的说法,正则匹配结果中缺少了7个字符,即 "9728d9177f3"。
立即学习“Python免费学习笔记(深入)”;
问题的根源
分析代码可知,问题出在以下两点:
- 非贪婪模式的正确使用方法:非贪婪模式的正确用法是匹配尽可能少的字符,而不是任意数量的字符。在本例中,正确使用非贪婪模式应该为 (.+?)(?:=)。
- 去掉点号的错误操作:代码中将正则表达式中的点号(.)去掉,这是错误的操作。点号表示匹配任意字符,如果去掉,正则表达式将无法匹配到 "9728d9177f3" 部分。
正确的做法
根据以上分析,正确的正则表达式和代码如下:
import re url = "http://tiebapic.baidu.com/forum/w%3d580/sign=33b74ba68b11728b302d8c2af8fdc3b3/9728d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg?tbpicau=2024-01-18-05_4f80cd1a7f322fc1e38464b6e05d9188" pattern = re.compile(r'http://tiebapic.baidu.com/(.+?)(?:=)/?(.+?).(.+?)?tbpicau=', re.s) filenames = pattern.findall(url) filename = '%s%s%s' % (filenames[0][0], filenames[0][1], filenames[0][2]) print(filename)
登录后复制
修改后的代码输出正确的文件名:
forum/w33D580/9728d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg
登录后复制
以上就是Python正则非贪婪匹配丢失字符的原因是什么?的详细内容,更多请关注抖狐科技其它相关文章!
-
菜鸟裹裹怎么批量删除
菜鸟裹裹批量删除订单步骤:登录菜鸟裹裹账号;进入订单列表;勾选要删除的订单;点击"删除";确认删除。批量删除只能适用于已完成或已取消的订单。菜鸟裹裹如何批量删除订单? 步骤:登录菜鸟裹裹账号: 打开菜...
-
脑洞大侦探如何点燃火柴 点燃火柴操作方法
在《脑洞大侦探》的某个关卡中,您可能会遇到需要点燃一根火柴的任务。这个任务看似简单,却可能蕴含着不少有趣的挑战。那么是如何点燃火柴的呢?下面去看看吧。点燃火柴通关方法1、进入游戏后点击抽屉就能获得照片...
-
黑神话悟空白狐支线任务完成步骤
如何解锁并完成《黑神话:悟空》中的白狐支线任务《黑神话:悟空》中存在着众多支线任务,而白狐支线任务便是其中之一。玩家需要了解它的解锁方法和完成步骤才能开启这段精彩的冒险。php小编草莓将通过本文详细讲...
-
任务栏图标消失了 win11系统任务栏图标不显示的解决方法
问题:在 windows 11 系统中,任务栏图标消失,如何解决?如果你遇到了这个问题,不要惊慌!本教程将一步步引导你解决此问题,让你轻松恢复任务栏图标。php小编新一经过整理,发现了以下几种解决方案...
-
网易云itunes自动续费怎么关闭
网易云音乐 itunes 自动续费关闭方法:进入 apple id 设置 > 管理订阅 > 取消网易云音乐订阅。通过 itunes store、网易云音乐 app 或联系客服均可取消。网易云音乐 iT...