You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则匹配指定字符串后提取后续3位字符:如何从访问日志提取HTTP状态码

问题原因

  • 正则未使用捕获组:re.findall() 匹配无捕获组的正则时,会返回完整匹配的字符串,而非你需要的状态码片段。
  • .* 属于贪婪匹配规则,会尽可能多的向后匹配字符,可能会命中日志行靠后的三位数字段,导致匹配结果偏离预期。
  • 行尾符号$无效是因为HTTP状态码不属于行尾元素,其后还跟随了响应字节数、UA标识等内容,$只能匹配整行的结束位置,无法适配当前场景。
  • 额外的细节问题:正则里的HTTP/1.1中的.没有转义,正则中.默认匹配任意字符,存在误匹配风险。

修正后的实现代码

import re

with open("access.log", "r", encoding="utf-8") as file:
    contents = file.read()
    # 用捕获组仅提取三位状态码,转义小数点保证匹配精准
    http_codes = re.findall(r'HTTP/1\.1"\s+(\d{3})', contents)
    print(http_codes)

可选优化

如果日志中存在HTTP/2.0等其他版本的请求,可以调整正则兼容所有HTTP版本:

http_codes = re.findall(r'HTTP/\d\.\d"\s+(\d{3})', contents)

内容的提问来源于stack exchange,提问作者Randson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:15:03