Python 正则表达式测试工具

支持 findall / match / search 三种模式,自动转换 Python 专有语法,展示匹配内容、位置与命名分组

/
标志:
匹配模式
转换后的 JavaScript 正则
Python 专有语法(\A、\Z、(?P<name>)、(?P=name))已自动转换为 JS 兼容写法
等待输入…

匹配结果

输入正则与文本后将显示匹配结果

原文高亮预览

广告位

工具介绍与功能

本工具用于在线测试 Python 正则表达式。由于浏览器使用 JavaScript 正则引擎,工具会自动将 Python 专有语法转换为 JS 兼容写法后再执行匹配,方便快速验证正则逻辑。

  • 三种模式:findall 全部匹配、match 开头匹配、search 搜索
  • 四种标志:I 忽略大小写、M 多行、S 点匹配所有、X 注释详细
  • 语法转换:\A、\Z、(?P<name>)、(?P=name) 自动适配
  • 详细结果:显示每个匹配的内容、位置与命名分组

安全保障

  • 本地执行:正则匹配全部在浏览器本地完成,文本不上传服务器
  • 实时反馈:输入即时匹配,错误语法立即提示
  • 安全防护:内置匹配次数上限,防止灾难性回溯卡死浏览器
  • 隐私保护:不记录任何输入内容,关闭页面即清除

常见问题

match 和 search 有什么区别?

re.match 只从字符串开头尝试匹配,若开头不匹配则返回 None;re.search 在任意位置搜索第一个匹配。例如对文本 "abc123",正则 "\d+" 用 match 无结果(开头是字母),用 search 能匹配到 "123"。本工具的 match 模式即对应 re.match 的行为。

Python 和 JavaScript 正则有哪些差异?

主要差异:1)Python 用 (?P<name>...) 命名分组,JS 用 (?<name>...);2)Python 用 (?P=name) 反向引用,JS 用 \k<name>;3)Python 的 \A、\Z 表示字符串首尾,JS 用 ^、$(受多行模式影响);4)Python 的 re.VERBOSE 模式忽略空白与注释,JS 无原生支持。本工具会自动转换前三类,VERBOSE 模式则预处理去除空白与注释。

为什么转换后的正则和原始输入不一样?

为了让 JavaScript 引擎能正确执行,工具会做以下转换:(?P<name>...) → (?<name>...);(?P=name) → \k<name>;\A → ^;\Z → $;开启 X 标志时还会去除模式中的空白与 # 注释。转换后的正则会显示在“转换后的 JavaScript 正则”区域,方便对照。正则逻辑保持等价,不影响匹配结果。

S 标志(DOTALL)和 M 标志(MULTILINE)有什么区别?

S(DOTALL)让点号 . 也能匹配换行符,扩大了 . 的范围;M(MULTILINE)改变 ^ 和 $ 的行为,使其匹配每行的开头和结尾(而非整个字符串的开头结尾)。两者互不影响,可同时开启。例如想跨行匹配整段文本时用 S,想按行定位时用 M。

命名分组在结果中如何展示?

使用 (?P<name>...) 定义命名分组后,每个匹配结果会单独列出命名分组及其捕获内容,例如 year: 2024、month: 01、day: 15。同时编号分组也会一并列出。命名分组能显著提升正则的可读性,推荐在复杂正则中优先使用。