马钰乔布轩 发表于 2020-7-21 12:58:57

大佬们帮我看一下为什么正则表达式无法匹配完全

本帖最后由 马钰乔布轩 于 2020-7-21 13:03 编辑

import urllib.request
import re

url = "http://www.jimohezi.com/photo/show?id=889933"


req = urllib.request.Request(url)
req.add_header = ('User-Agent','Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36')
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')

print(html)
p = re.findall(r'\w\w3/720/\w{2}/(\w+)\.jpg',html)
print(p)   #匹配结果不完全,无法匹配前面的前缀/pp3/720/5f/和后面的.jpg

Twilight6 发表于 2020-7-21 13:10:46


匹配的到呀,我这都匹配出来了?

马钰乔布轩 发表于 2020-7-21 13:12:45

Twilight6 发表于 2020-7-21 13:10
匹配的到呀,我这都匹配出来了?

大神!为啥我匹配完就是一部分呀,代码就是上面的那个,一模一样

sunrise085 发表于 2020-7-21 13:15:20

本帖最后由 sunrise085 于 2020-7-21 13:17 编辑

马钰乔布轩 发表于 2020-7-21 13:12
大神!为啥我匹配完就是一部分呀,代码就是上面的那个,一模一样

因为你在中间加了一个括号进行了分组,所以只能匹配到分组内的信息。
re.findall(r'\w\w3/720/\w{2}/(\w+)\.jpg',html)
正则中有个小括号(\w+),所以匹配出来的只是小括号分组的内容。
你需要把小括号去掉
re.findall(r'\w\w3/720/\w{2}/\w+\.jpg',html)

小甲鱼的正则讲解中有相关的解释

Twilight6 发表于 2020-7-21 13:17:36

马钰乔布轩 发表于 2020-7-21 13:12
大神!为啥我匹配完就是一部分呀,代码就是上面的那个,一模一样

噢 你是这个意思呀,那楼上正解

马钰乔布轩 发表于 2020-7-21 13:17:52

sunrise085 发表于 2020-7-21 13:15
因为你在中间加了一个括号进行了分组,所以只能匹配到分组内的信息。
re.findall(r'\w\w3/720/\w{2}/( ...

解决了,谢谢!!!

马钰乔布轩 发表于 2020-7-21 13:20:48

Twilight6 发表于 2020-7-21 13:17
噢 你是这个意思呀,那楼上正解

谢谢大佬,解决了!!!
页: [1]
查看完整版本: 大佬们帮我看一下为什么正则表达式无法匹配完全