首页/开发/正则与编码速查/Python 正则标志位的作用

Python 正则标志位的作用

Python 正则标志位控制匹配语义:IGNORECASE 忽略大小写,MULTILINE 让锚点按行生效,DOTALL 让点号匹配换行,VERBOSE 便于书写长模式,ASCII 让简写类退回 ASCII 语义。全局内联标志必须位于模式开头,局部标志用带冒号的形式限定在分组内。

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

Python 正则标志位的作用

标志位决定匹配的语义细节:是否忽略大小写、锚点是否按行生效、点号是否匹配换行、空白是否被忽略、简写类是否退回 ASCII。它们可以作为参数传入,也可以写成模式内的内联形式;内联形式的全局标志必须出现在模式最开头,局部标志则可以写在需要生效的位置。

基本信息

忽略大小写IGNORECASE,内联写作 (?i),在 Unicode 模式下按字符的折叠规则比较
多行与单行MULTILINE 让行首行尾锚点按行生效,DOTALL 让点号也匹配换行
可读模式VERBOSE 忽略模式中的空白并允许注释,用来写长模式
字符类语义ASCII 让简写类退回 ASCII 语义,UNICODE 是字符串模式的默认值
区域设置LOCALE 只对字节模式有效,已属遗留选项,不建议在新代码中使用

典型使用场景

  • 大小写不敏感校验:域名、邮箱域名部分、关键字匹配都需要忽略大小写
  • 逐行处理:开启多行模式让行首与行尾锚点按行走,便于按行提取
  • 跨行匹配:处理带换行的块级内容时开启点号匹配换行,或改用显式字符类
  • 长模式维护:用可读模式把复杂规则分行书写并加注释,评审时一目了然
  • 限定 ASCII 范围:校验只允许 ASCII 的字段时显式指定,避免非 ASCII 字符混入

标志位写法

标志位写法
import re
re.search(r'abc', s, re.I | re.M)     # 组合多个标志,用按位或连接
re.search(r'(?i)abc', s)              # 内联写法等价于传入 IGNORECASE
re.search(r'(?i:abc)', s)             # 局部标志:只对这个分组生效,可写在任意位置
re.search(r'(?s).+', s)               # 让点号匹配换行
try:
    re.search(r'a(?i)b', s)           # 全局内联标志不在开头会直接报错
except re.error as e:
    print('模式非法', e)
re.match(r'\w', '中', re.A)            # 加 ASCII 后不匹配非 ASCII 单词字符

常用标志与影响

标志作用影响面
IGNORECASE忽略大小写所有字符比较
MULTILINE锚点按行生效行首与行尾锚点
DOTALL点号匹配换行点号与依赖点号的量词
VERBOSE忽略空白并允许注释整个模式书写形式
ASCII简写类退回 ASCII单词与数字类简写
LOCALE按区域设置处理字节仅字节模式,遗留选项
全局内联标志必须写在模式最开头,写在中间会直接抛错;需要局部生效时使用带冒号的形式,把标志限定在某个分组范围内,这样既清晰也不会影响整条模式。
字符类语义标志之间相互冲突:指定 ASCII 后默认的 Unicode 语义被覆盖,与区域设置选项同时使用也会报错,显式选择一种语义即可。

易错点

  • 把全局内联标志写在模式中间:直接抛错,从其他语言或旧版本文档照搬的模式最容易出现
  • 用可读模式后忘记空白被忽略:模式里想匹配的真实空格必须转义或放进字符类,否则规则静默变宽
  • 开启忽略大小写就以为无副作用:部分字符在特定语言的折叠规则下会扩展开来,比较结果可能超出预期
  • 开启点号匹配换行后仍用点号跨行:跨行匹配会让贪心量词吃掉远超预期的内容,应改用显式字符类收紧范围
  • 字符类标志冲突:同时指定 ASCII 与区域设置会报错,标志位组合需要逐项确认

数据来源与参考

  • Python 官方文档 re 模块:模块内容与标志位常量
  • Python 官方文档 re 模块:内联标志与局部标志语法
  • Python 官方文档:Unicode 匹配与 ASCII 标志说明

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

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