Python 正则表达式测试工具
支持 findall / match / search 三种模式,自动转换 Python 专有语法,展示匹配内容、位置与命名分组
匹配结果
输入正则与文本后将显示匹配结果
原文高亮预览
工具介绍与功能
本工具用于在线测试 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。同时编号分组也会一并列出。命名分组能显著提升正则的可读性,推荐在复杂正则中优先使用。