python - 使用 Python 正则表达式的非捕获组中的多个捕获组
问题描述
我有以下代码在非捕获组中使用多个捕获组:
>>> regex = r'(?:a ([ac]+)|b ([bd]+))'
>>> re.match(regex, 'a caca').groups()
('caca', None)
>>> re.match(regex, 'b bdbd').groups()
(None, 'bdbd')
如何更改代码以输出('caca')
或('bdbd')
?
解决方案
你很亲密。
要始终作为组 1 获取捕获,可以使用先行进行匹配,然后使用单独的捕获组进行捕获:
(?:a (?=[ac]+)|b (?=[bd]+))(.*)
或者在 Python3 中:
>>> regex=r'(?:a (?=[ac]+)|b (?=[bd]+))(.*)'
>>> (?:a (?=[ac]+)|b (?=[bd]+))(.*)
>>> re.match(regex, 'a caca').groups()
('caca',)
>>> re.match(regex, 'b bdbd').groups()
('bdbd',)
推荐阅读
- php - PHP 8 没有显示 short_open_tag 设置
- reactjs - 自定义挂钩的目的是什么?
- python - Using pytest-mock to mock objects and object methods
- node.js - 使用firebase Auth在服务器端登录但不在客户端
- go - 通过 socks5h 代理获取
- android - 如何在没有 Root 的 Android 11 上安装 HttpCanary 证书
- java - 一段时间后关闭警报对话框
- azure - 发布到市场的 Azure 托管应用程序无法向自定义提供程序发出 POST 请求(由于招摇而被阻止?)
- matlab - 无法识别的函数或变量“dip_filtering”
- azure - 设置从 EPIC EMR 到 Azure FHIR API (Paas) 的批量数据摄取需要哪些组件?