一个正则表达式, Python 的 re.compile 之后,丢失部分信息,搞不懂,特来求助

105 天前
 RangerWolf

# 注意这个 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就结束了。。。
一直想不通为什么,特来求助

1350 次点击
所在节点    Python
5 条回复
ladypxy
105 天前
扔到 regex101 里看一眼就好了。
双引号前要加\
zk8802
105 天前
这个应该是 pattern.__repr__() 显示的问题。你可以试试 print(regex.pattern),结果应该是正确的。
lzoje
105 天前
问 chatgpt 说只是 print 输出显示问题,你 print regex.pattern 就是完整的了
FlyaiF
105 天前
试了下最后一个捕获组 req_id 不能用贪婪匹配,匹配到空了。
正则应该是完整的,应该是 print 问题。
NoOneNoBody
105 天前
长字符串最好用三引号

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1066310

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX