Python 如何仅捕获析取的匹配边?

Python 如何仅捕获析取的匹配边?,python,regex,Python,Regex,以下代码: re.findall('(a).(b)|(c).(d)','axbcyd') 捕获两个匹配项,两个匹配项都有两个空字符串: [('a', 'b', '', ''), ('', '', 'c', 'd')] 我想返回: [('a', 'b'), ('c', 'd')] 本质上,只在实际匹配的析取一侧捕获。我该怎么做?喜欢完全不同的方法…就像阿维纳什·拉吉说的那样;只需删除空元素: map(lambda x: tuple(filter(lambda y: y!='',x)),re.

以下代码:

re.findall('(a).(b)|(c).(d)','axbcyd')
捕获两个匹配项,两个匹配项都有两个空字符串:

[('a', 'b', '', ''), ('', '', 'c', 'd')]
我想返回:

[('a', 'b'), ('c', 'd')]

本质上,只在实际匹配的析取一侧捕获。我该怎么做?喜欢完全不同的方法…

就像阿维纳什·拉吉说的那样;只需删除空元素:

map(lambda x: tuple(filter(lambda y: y!='',x)),re.findall('(a).(b)|(c).(d)','axbcyd'))
(编辑:功能更少,更具Python风格:

[tuple(y for y in x if y != '') for x in re.findall('(a).(b)|(c).(d)','axbcyd')]

)

只需删除空元素即可。谢谢,好主意。出于好奇,有什么方法可以纯粹用正则表达式来做吗?只有在你也能找到
a.d
的情况下:
re.findall('(a | c)。(b | d),'axbcyd')
。否则这可能是不可能的,因为组索引是独立于输入字符串确定的。