首页 > 解决方案 > 使用 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')

标签: pythonregexcapturing-group

解决方案


你很亲密。

要始终作为组 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',)

推荐阅读