Python:将正则表达式组合并为常规括号的非分组版本中的一个

时间:2014-01-29 15:01:43

标签: python regex python-2.7

以下代码导致

>>> r = re.compile(r'(?:\|(.+?)|([a-z]+))<(.+?)>')
>>> print r.findall('hello, stack<overflow> / hello|fluid-<overflow>')
[('', 'stack', 'overflow'), ('fluid-', '', 'overflow')]

我需要的是[('stack', 'overflow'), ('fluid-', 'overflow')]。也就是说,我想忽略任何不匹配的群体。我如何实现这一目标?

2 个答案:

答案 0 :(得分:4)

将正则表达式更改为:

r'((?<=\|).+?|[a-z]+)<(.+?)>'

使用look-behind声明管道符|,而不包括在主匹配中。

答案 1 :(得分:0)

这样的事情:

>>> re.findall(r'(?:([^|\s]+)<(.+?)>)', 'hello, stack<overflow> / hello|fluid-<overflow>')
[('stack', 'overflow'), ('fluid-', 'overflow')]