选对查找范围
finditer 列出所有不重叠命中,search 只找首项,fullmatch 要求整段文本完全命中。这里没有 JavaScript 的 g 标志;改动模式后旧报告会立即过期。
正则与模式匹配
输入 Python 表达式与测试文本,手动检查捕获组、位置和替换预览。首次测试才加载运行时。
等待输入或手动测试。
表达式与测试文本只在本浏览器处理。首次测试时才加载 Python 运行时文件。
i — 忽略大小写m — ^ 和 $ 匹配行边界s — 点号匹配换行x — 忽略模式空白并允许注释a — 字符类采用 ASCII 规则Python 运行时:首次测试时加载
上限:表达式 2000、文本 100000、替换模板 10000 个 UTF-16 单位;10000 条匹配、百万单位输出、四百万单位报告。执行超过两秒会终止。
等待输入或手动测试。
同一段模式在 JavaScript 测试器里成功,不代表放进 Python 后也能运行。Python 正则表达式在线测试直接调用 CPython 的 re,能在写代码前看到命名组、标志和反向引用的实际结果。
需要 Python 正则测试器时,可以分别比较 finditer、search 和 fullmatch。Python 正则匹配的起止位置按 Unicode 码点计数;Python 正则替换则使用 \g<name>,不是 JavaScript 的 $1。
Python 正则表达式在线测试将整体匹配、编号组和命名组并列展示。未参与的分组保留 null 与 (-1, -1),真正捕获到的空串则显示为空字符串,方便排查可选字段。
用 \g<last> 和 \g<first> 调换捕获字段时,真实 re.subn 会生成另一份结果。替换次数为 0 表示全部替换;原始测试文本仍在左侧,便于逐处比对。
finditer 列出所有不重叠命中,search 只找首项,fullmatch 要求整段文本完全命中。这里没有 JavaScript 的 g 标志;改动模式后旧报告会立即过期。
i、m、s、x、a 对应 Python re 标志。m 影响行首与行尾,s 才让点号跨过换行。表达式不会随着每次输入自动运行;首次手动测试时才加载 Python。
分组位置从 0 起算,末尾不包含在内,单位是 Unicode 码点。A😀B 里的 B 起点是 2;浏览器高亮会换算 UTF-16 位置。可按 Ctrl/Cmd + Enter 重新测试。
Python 正则表达式在线测试通过 Pyodide 在独立线程加载 CPython,并展示实际版本,不用 JavaScript RegExp 冒充 Python。
每条命中保留 group 0、编号与名称、值及位置。含 emoji 的文本会先把 Python 码点位置换算成浏览器偏移,避免高亮错位。
Python 正则替换预览使用 re.subn;\1 和 \g<name> 会展开,空模板会删除命中,$1 在这里仍是普通文本。
运行成功后可复制或下载 JSON,记录表达式、标志、操作、Python 版本和全部结果;替换模式还可导出文本。
先看 regex101 选的是不是 Python 引擎;它可能默认 PCRE2。本页运行真实 CPython re,例如命名组写作 (?P<name>...)。
能。选择替换操作并填模板,\g<name> 与 \1 按 Python 规则展开,$1 不会被当成分组。结果只做预览,不覆盖原文。
可以。每条命中都有高亮、分组值和位置;零宽命中也会标出位置。Python 在浏览器独立线程中运行。
前者优先尝试较短的可行片段,后者先尝试最长片段。两者都不保证不会慢;用真实边界样本测试,必要时停止运行。
两者都能组合模式,但只有 (...) 占用捕获编号,可在分组结果或替换模板中引用;(?:...) 只分组,不产生捕获。
还有疑问?