# 注意这个 pattern 的最后一部分是 req_id
pattern = r'(?P<remote_addr>.*?)\ \-\ (?P<remote_user>.*?)\ \[(?P<time_local>.*?)\]\ "(?P<request>.*?)"\ (?P<status>.*?)\ (?P<body_bytes_sent>.*?)\ "(?P<http_referer>.*?)"\ "(?P<http_user_agent>.*?)"\ (?P<req_id>.*?)'
regex = re.compile(pattern)
print("---- regex:", regex)
print 出来的结果:
---- regex: re.compile('(?P<remote_addr>.?)\ \-\ (?P<remote_user>.?)\ \[(?P<time_local>.?)\]\ "(?P<request>.?)"\ (?P<status>.?)\ (?P<body_bytes_sent>.?)\ "(?P<http_referer>.?)"\ "(?P<http_user_agent>.?)")
缺少了最后一部分req_id
,到了http_user_agent
就结束了。。。
一直想不通为什么,特来求助
1
ladypxy 96 天前
扔到 regex101 里看一眼就好了。
双引号前要加\ |
2
zk8802 96 天前 1
这个应该是 pattern.__repr__() 显示的问题。你可以试试 print(regex.pattern),结果应该是正确的。
|
3
lzoje 96 天前
问 chatgpt 说只是 print 输出显示问题,你 print regex.pattern 就是完整的了
|
4
FlyaiF 96 天前
试了下最后一个捕获组 req_id 不能用贪婪匹配,匹配到空了。
正则应该是完整的,应该是 print 问题。 |
5
NoOneNoBody 96 天前
长字符串最好用三引号
|