Python3正则表达式之:(?(id/name)yes-pattern|no-pattern)条件性匹配

Dylan
Dylan
发布时间:2026-10-14| 6人浏览过
原创

本文详细解析Python3正则表达式中的条件匹配语法(?(id/name)yes-pattern|no-pattern)。文章阐述了该语法的用途、参数含义及具体语法结构,并通过多个代码实例深入探讨了有组和无组、匹配成功与失败时的不同执行路径,最后总结了该特殊规则生效的关键条件及输出结果。

1. 用途

正则表达式中(?(id/name)yes-pattern|no-pattern)的功能如下:

首先,尝试匹配由id或name指定的条件,并执行yes-pattern部分的匹配逻辑;

若id或name所代表的条件未得到满足,则转而匹配no-pattern部分的内容;

这一描述可能较为晦涩,初学者或许难以一次性完全理解。

2. 参数含义

这里的name或id,指的是在当前条件匹配位置之前,通过分组(group)所捕获的内容。

关于name:若存在命名分组,即使用了named group,则该分组拥有对应的name,此处的name即指代该分组的名称;

关于id:若为无命名分组,即使用了unnamed group,则该分组拥有对应的编号,称为group的number,亦即id,此处的id即指代该分组的编号;

关于yes-pattern:若前面的group匹配成功,则执行yes-pattern的匹配;

关于no-pattern:若前面的group匹配失败,即未找到符合该group的内容,则执行no-pattern的匹配;

注意:上述yes-pattern和no-pattern均为普通的正则表达式,用于匹配所需的具体内容。

3. 语法

若存在no-pattern,则前面需有一个竖杠'|',用于分隔yes-pattern和no-pattern;

若无需匹配no-pattern的部分,则可连同'|'一起省略不写。

实例展示:


>>> re.search(r'(\d+)?(?(1)\w+|jb51\.\w+)', 'jb51.com')>>> re.search(r'(\d+)?(?(1)\w+)', '100jb51')

其中?(1)代表序号为1的group,即前文提到的(\d+);第二个表达式中未使用no-pattern。

4. 用法详解

基于上述示例进行变换,通过实例深入探索其详细用法及技巧。

4.1 移除(\d+)后的问号,即要求group 1必须存在,而非可选。

执行结果:


>>> re.search(r'(\d+)(?(1)\w+|jb51\.\w+)', 'jb51.com')
>>>

整体规则匹配失败,返回空值,no-pattern部分未按预期执行。

4.2 修改匹配字符串。


>>> re.search(r'(\d+)(?(1)\w+|jb51\.\w+)', '1jb51.com')

此时可以匹配到,group1和yes部分均匹配成功。

4.3 group可有可无的情况(group后增加问号)。


>>> re.search(r'(\d+)?(?(1)\w+|jb51\.\w+)', 'jb51')
>>>

若group未匹配到,且该group为可选(可有可无),则group被视为匹配不成功,继续执行no-pattern部分的匹配。

4.4 仅匹配group 1部分,yes部分未匹配。


>>> re.search(r'(\d+)(?(1)\w+|jb51\.\w+)', '1000')

仅匹配group 1部分,即使yes部分未匹配,仍有匹配结果,这说明yes-pattern和no-pattern并非必须都匹配成功。

5.结论

1. 通过对比4.1、4.2和4.3可以发现:

当该特殊规则中作为判断条件的组本身不允许为空时,若该组对目标字符串匹配为空,则整体规则匹配失败,因此作为整体一部分的特殊规则自然无效。所以,要想特殊规则的no-pattern生效,必须确保判断条件对应组的匹配数可以为0。

2. 通过4.4可知:可以仅匹配group部分,如果yes-pattern和no-pattern没有匹配到,则会仅输出group匹配的内容。

更多关于Python3正则表达式的相关教程请查看下面的相关链接

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。