python 我是用的是分组非贪婪匹配 正则匹配,为什么匹配结果少了7?
python 正则匹配,为什么匹配结果少了7?我是用的是分组非贪婪匹配
代码如下:
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/(.+?)sign=.+?\/(.+?).(.+?)\?tbpicau=', re.S)
filenames = pattern.findall(url)
filename = '%s%s%s' % (filenames[0][0], filenames[0][1], filenames[0][2])
print(filename)
//输出结果:
forum/w33D580/928d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg
//期望输出结果:
forum/w33D580/9728d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg
为什么结果中928d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg 少了7?
回答:
正则的.表示任意字符,如果中间匹配字符点使用转义.
按你的做法去掉点,期望值怎么还会是.jpg呢
不需要去掉点的话,这(.+?).(.+?)又是莫名其妙的做法
回答:
楼上已经指出问题点了
根据你的表达式,略微修改后为
pattern = re.compile(r'http://tiebapic\.baidu\.com/([^=]+)sign=[^/]+\/([^.]+\.[^?]+)\?tbpicau=', re.S)
修改后取第1个分组和第二个分组合并
以上是 python 我是用的是分组非贪婪匹配 正则匹配,为什么匹配结果少了7? 的全部内容, 来源链接: utcz.com/p/939078.html