PYTHON / 实验室
FIGURE 04 / PATTERN INSPECTION BENCH

让规则,找到文字。

Python 正则表达式实验室 · 元字符、基本函数与综合应用

真实 Python re 预计算的教学预设。离线可用,不执行任意 Python 或任意正则。动画仅展示匹配结果,不是内部回溯执行过程。

FIG 04 · RE LAB正则文本检验台
RE · LAB
双夹具 / [start, end)
键帽上显示文本的字符实例(下方小字是码点索引),命中的字符键高亮;两只夹具卡在匹配的起点与终点键边;前方显示屏给出函数调用和当前结果。文本超过 12 个字符时,键盘显示跟随当前匹配的 12 字符窗口,完整文本见下方。后侧仓位代表捕获组,超过三个仍在下方完整列出。

01 / 完整输入文本

索引按 Unicode 码点(与 Python str 一致)。␠ 空格 · ↵ 换行 · ⇥ 制表符;竖线 ∣ 表示零宽位置,不将字符涂成命中。

02 / 当前匹配与捕获组

随手查阅 / 正则与函数速查

匹配什么

. 除换行以外的任意字符;S 可跨换行。^ $ 首尾位置;M 改为行首尾。$ 也可位于尾换行之前。

[] [^] 字符类与否定类;类内开头 ^ 才是否定。\d \D Unicode 数字及其补集;\w \W Unicode 字母数字、下划线及其补集;\s \S 空白及其补集。

\b 单词边界,不消费字符;原始字符串 r'\b' 避免 Python 把它解释为退格。字符类内 [\b] 是退格。\. 匹配字面点号。

如何组合

* + ? {m,n} 分别是 0+、1+、0–1、m–n 次;默认贪婪,追加 ? 改为非贪婪。| 分支按从左到右尝试。

() 捕获组;(?:) 非捕获组;(?P<name>) 命名组。(?=) (?!) (?<=) (?<!) 零宽断言,Python 后行断言必须固定宽度。

r'' 是 Python 字符串语法,不是正则开关;原始字符串也不能以奇数个反斜杠结尾。零长度匹配成功时,span 的起止相同。

返回什么

search / match / fullmatch → Match 或 None;只校验整个字符串时使用 fullmatch。finditer → Match 迭代器。findall → 列表:无组为全文、一个组为字符串、多个组为元组。

sub → 新字符串;subn → (新字符串, 次数);split → 列表,捕获分隔符也返回;compile → 模式对象;escape → 转义后的模式字符串。不是所有函数都返回新字符串。

group(0) 全部匹配,groups() 捕获元组,groupdict() 命名字典;span / start / end 是半开区间。未参与组为 None / (-1,-1)。I 忽略大小写、M 多行、S 点号跨换行。