如何只捕获分离的匹配方?

时间:2015-01-28 23:25:14

标签: python regex

以下代码:

re.findall('(a).(b)|(c).(d)','axbcyd')

捕获两个匹配,两个都有两个空字符串:

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

我想返回:

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

基本上,只捕获实际匹配的析取的一侧。我怎样才能做到这一点?对完全不同的方法感到满意......

1 个答案:

答案 0 :(得分:2)

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

map(lambda x: tuple(filter(lambda y: y!='',x)),re.findall('(a).(b)|(c).(d)','axbcyd'))

(编辑:功能较少,更加pythonic:

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