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

Python 2.7中HTTP GET请求头的正则匹配问题

解决HTTP请求头行的正则匹配问题

我来帮你搞定这个正则表达式的问题!首先咱们拆解你的需求,再一步步修正你的正则:

核心需求回顾

你要匹配的是符合以下规则的HTTP请求头行:

  • 开头是一个或多个非冒号、非空格的字符(请求头的键)
  • 紧接着是冒号+空格(注意:冒号前面不能有空格)
  • 然后是一个或多个非冒号的字符(请求头的值,允许空格,只要没有冒号就行)
  • 最后必须以换行符结尾(\r\n或\n都兼容)

你的原始正则问题分析

你写的^.{1,}: .{1,}[/r/n]$有几个明显的问题:

  1. .会匹配任意字符,包括冒号和空格,这就导致键和值部分会包含你想排除的冒号,完全不符合需求;
  2. [/r/n]是错误的写法——这是一个字符集,匹配的是/、r、n这三个字符中的一个,而不是换行符,正确的换行符应该用转义序列\r和\n;
  3. 没有精准限制键和值的字符范围,导致不符合规则的行也会被匹配。

正确的正则表达式

根据你的需求,我们用否定字符集来排除特定字符,写出精准的正则:

^[^:\s]+: [^:]+\r?\n$

咱们逐个部分解释:

  • ^:匹配行的起始位置
  • [^:\s]+:匹配一个或多个非冒号、非空白符的字符(也就是请求头的键,确保没有冒号和空格)
  • : :严格匹配冒号紧跟一个空格(避免像Host : ...这种不符合格式的情况)
  • [^:]+:匹配一个或多个非冒号的字符(请求头的值,允许空格,只要不含冒号就符合要求)
  • \r?\n:兼容Windows的\r\n和Unix的\n换行符
  • $:匹配行的结束位置

Python中使用示例

如果你用Python的re模块,这样写就可以:

import re

# 匹配单行带换行的头行
header_pattern = re.compile(r"^[^:\s]+: [^:]+\r?\n$")

# 如果你要从多行文本中匹配所有符合的头行,加上多行模式
header_pattern_multiline = re.compile(r"^[^:\s]+: [^:]+\r?\n?$", re.MULTILINE)
# 这里的\r?\n?$是为了兼容最后一行可能没有换行的情况,如果严格要求必须有换行,可以去掉最后的?

验证你的示例

  • 符合要求的行:
    • Host: www.stackoverflow.com\n:完全匹配正则,成功命中
    • a-b-sads&^*@hgsdafAS&FTD: sjal;dfh9S^& D^F& (SDfsdgafs\n:键不含冒号和空格,值不含冒号,成功命中
  • 不符合要求的行:
    • Host : www.stackoverflow.com:冒号前面多了空格,:部分不匹配,失败
    • H:o:s:t: www.stackoverflow.com:键里有冒号,[^:\s]+在第一个冒号处就停止匹配,后续内容不匹配,失败
    • Host: www.:::stackoverflow.com:值里有冒号,[^:]+在第一个冒号处停止匹配,失败
    • Host: www.stackoverflow.com:没有换行符,\r?\n$部分不匹配,失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:43:24