首页/开发/正则与编码速查/捕获分组基础与括号分组规则
正则基础45 条

捕获分组基础与括号分组规则

圆括号分组同时解决两件事:让量词作用于整组,以及把命中内容记录下来供提取与替换引用。第 1 组对应第一个左括号,未参与匹配与匹配空串含义不同,只看结构时应改用非捕获分组。

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

分组解决两件事

圆括号把若干元素打包成一个整体,一是让量词可以作用于整组而不是单个字符,二是把命中内容单独记下来方便提取或引用。前者改变匹配语义,后者只影响结果如何被读出。

捕获的代价

每个捕获组都会让引擎额外记录起止位置,数量多时会增加开销,也会让组编号变得难读。只看结构不取内容的分组,应当改用非捕获写法,既省开销也不打乱编号。

基本信息

语法圆括号包裹要分组的元素
编号起点第 1 组是第一个左括号,第 0 组固定表示整个匹配
作用一让量词作用于整组,如整组重复若干次
作用二把匹配片段取出,用于替换或后续处理
未参与匹配可选分支未命中时该组内容为空,需要区分空串与未参与
替代写法非捕获分组只分组不记录,命名分组便于按名字读取

典型使用场景

  • 提取结构化字段:从日期、地址、日志行里分别取出各段
  • 把量词作用到多字符结构上,实现整组重复
  • 限定分支范围,让或运算只在组内生效
  • 替换时引用组内容重排文本,例如把日期改写成另一种顺序
  • 校验并同时抽出关键片段,避免写两条模式

分组的两种用途

分组的两种用途
import re
m = re.search(r'(\d{4})-(\d{2})', '2026-10')
print(m.group(0))   # 整个匹配内容
print(m.group(1))   # 第一个括号里的内容
print(m.groups())   # 全部捕获组成元组
re.search(r'(ab){2}', 'abab')        # 量词作用于整组,必须匹配两遍
re.sub(r'(\w+)@(\w+)', r'\2/\1', 'a@b')  # 替换时引用组,重排顺序
re.search(r'(?:ab)+c', 'ababc')      # 只分组不记录,编号更干净

分组写法对照

写法是否记录内容典型用途
普通圆括号记录,占用编号提取字段、替换引用
问号冒号开头的括号不记录,不占编号仅用于施加量词或限制分支
命名分组记录,可用名字读取字段多、可读性要求高的模式
断言括号不记录,零宽上下文条件判断
区分「组未参与匹配」与「组匹配到空串」是处理可选结构的关键。前者在很多语言里返回空值,后者返回空字符串,替换与判空逻辑必须分别处理。
分组编号按左括号出现顺序分配,嵌套时外层先编号。模式改动时插入一个新括号会把后续编号整体后移,替换逻辑随之失效,所以嵌套较深时建议改用命名分组。

易错点

  • 量词写在分组之外,实际只重复了最后一个字符,语义与预期不符
  • 在密集分组模式里插入新括号导致编号后移,替换结果整体错位
  • 把未参与匹配的组当成空串处理,判空逻辑失效
  • 该用非捕获分组的地方大量使用捕获分组,编号难读且增加无关开销

数据来源与参考

  • PCRE2 官方文档 pcre2pattern(3):捕获分组与非捕获分组
  • Python 官方文档 re 模块:分组、group 与 groups
  • IEEE POSIX.1-2017 Base Definitions 第 9 章:子表达式

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/regex-capturing-group-basics.html

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