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

Python正则表达式组合匹配返回None问题求助

问题解决

你的正则匹配返回None的原因有两个:

  1. re.match从字符串开头开始匹配,但目标语句statement最前面有空格,你的正则没匹配这部分内容,导致直接匹配失败。
  2. 虽然用了re.VERBOSE模式可以忽略正则里的换行和注释,但它不会自动处理目标字符串里的前置空格。

修改后的代码如下:

import re

pattern = """
^\s*  # 匹配开头的任意空白字符(包括空格、换行)
(?P<host>[0-9]{3}\.[0-9]{3}\.[0-9]{3}\.[0-9]{3}) 
- 
(?P<user_name>\w*) 
\s+  # 匹配用户名和时间之间的空格
(?P<time>\[.*?\]) 
\s+  # 匹配时间和请求之间的空格
(?P<Request>\".*?\")
"""

statement = """ 146.204.224.152 - feest6811 [21/Jun/2019:15:45:24 -0700] "POST /incentivize HTTP/1.1" 
"""
item = re.match(pattern, statement, re.VERBOSE)
print(item.groupdict())

运行后会输出符合预期的字典:

{'host': '146.204.224.152', 'user_name': 'feest6811', 'time': '[21/Jun/2019:15:45:24 -0700]', 'Request': '"POST /incentivize HTTP/1.1"'}

补充说明:

  • 加上^\s*匹配字符串开头的所有空白,解决了前置空格的问题。
  • 把正则里的空格换成\s+,确保匹配目标字符串中变量之间的任意数量空格(避免因空格数量不一致导致匹配失败)。
  • 去掉了re.IGNORECASE,因为你的正则里没有大小写相关的匹配需求,没必要开启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:14