首页/开发/正则与编码速查/Python 详细模式写可读正则

Python 详细模式写可读正则

Python 可读模式(VERBOSE)忽略模式中未转义的空白与井号注释,便于把长模式分行书写并逐段加注释。字符类内部的空白不被忽略,匹配真实空格必须转义;字符串拼接时要注意注释会延伸吞掉后续片段。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​​​​‌‌‌‌​​‌​‌‌‌​‌​​​‌‌​‌​​​​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​​​‌​​‌‌​‌‌‌‌​‌‌‌​​‌‌​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

Python 详细模式写可读正则

可读模式(VERBOSE)让模式里的空白与井号注释被忽略,从而可以把一条长模式拆成多行书写,每行只表达一个逻辑单元并在行尾写注释。它对复杂模式的评审与维护帮助很大,代价是「空白被忽略」这条规则本身也会带来陷阱:需要匹配真实空格时必须显式转义或放进字符类。

基本信息

开启方式传入 VERBOSE 标志,或在模式开头写内联标志,或对某个分组使用带冒号形式
被忽略的内容未转义的空白字符与井号开始到行尾的注释
不被忽略的位置字符类内部:方括号里的空白与井号都仍然是普通字符
书写建议配合原始字符串与三引号,让每一行对应一个逻辑单元

典型使用场景

  • 复杂校验规则:把 URL、日志格式等长模式分行书写,便于逐段评审
  • 团队协作:模式由多人维护,注释说明每段语义能显著降低误改概率
  • 教学与文档:把模式与解释放在一起,便于在文档中直接展示
  • 调试定位:分行书写后可以按段注释掉,快速缩小问题范围
  • 模式库建设:规则集中管理时统一使用可读模式提高整体可读性

可读模式写法

可读模式写法
import re
pat = re.compile(r'''
    (?P<scheme> https? ) ://          # 协议部分,允许 http 与 https
    (?P<host> [^/:?#]+ )              # 主机名,遇分隔符即停
    (?: : (?P<port> \d{1,5}) )?        # 端口可选,位数限制在五位以内
    (?P<path> /[^?#]* )?              # 路径可选,不含问号与井号
''', re.X)
pat.fullmatch('https://example.com:8443/a')   # 分行书写不影响匹配结果
re.search(r'(?x) a \s+ b', 'a   b')             # 内联形式:空白被忽略
re.search(r'(?x) [a b]', 'a')                   # 字符类内空格仍是字符本身

语法与是否忽略空白

写法空白处理说明
模式中的普通空格被忽略匹配真实空格必须转义或放进字符类
井号开启注释直到行尾匹配字面井号需转义或放进字符类
方括号内部不忽略字符类里的空格与井号都是普通字符
转义后的空白不忽略用来精确匹配一个空格
局部标志分组仅该分组内忽略适合在长模式里局部使用
字符串拼接时要格外小心:注释会延伸到该行末尾,如果拼接点恰好在一行注释之后,后接的内容可能被当成注释的一部分吞掉,表现为「拼上去的条件完全没生效」。
可读模式不改变匹配语义,只改变书写形式;如果开启后发现匹配结果变了,通常是因为原本用于对齐的空白或井号此前是作为字面字符参与匹配的,此时需要把它们显式表达出来。

易错点

  • 开启后可读模式后忘记转义真实空格:原本靠空格对齐的写法仍然能匹配,但要求空格的地方失效,规则静默变宽
  • 在字符类里以为空白被忽略:方括号内的空白与井号仍是普通字符,语义与模式其他位置不同
  • 拼接多个模式片段:注释会延伸到拼接边界之后,后续片段被当作注释丢弃
  • 忘记传标志位:模式照常编译但空白与井号成为字面内容,规则永远不会按预期匹配
  • 把注释写成大段说明:模式可读性提升有限,却让同一规则在代码与文档两处维护

数据来源与参考

  • Python 官方文档 re 模块:VERBOSE 标志与可读模式说明
  • Python 官方文档 re 模块:内联标志语法
  • Python 官方文档:正则表达式语法参考中的空白与注释

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/python-re-verbose-pattern.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​​​​‌‌‌‌​​‌​‌‌‌​‌​​​‌‌​‌​​​​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​​​‌​​‌‌​‌‌‌‌​‌‌‌​​‌‌​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​