以下代码导致
>>> r = re.compile(r'(?:\|(.+?)|([a-z]+))<(.+?)>')
>>> print r.findall('hello, stack<overflow> / hello|fluid-<overflow>')
[('', 'stack', 'overflow'), ('fluid-', '', 'overflow')]
我需要的是[('stack', 'overflow'), ('fluid-', 'overflow')]
。也就是说,我想忽略任何不匹配的群体。我如何实现这一目标?
答案 0 :(得分:4)
将正则表达式更改为:
r'((?<=\|).+?|[a-z]+)<(.+?)>'
使用look-behind声明管道符|
,而不包括在主匹配中。
答案 1 :(得分:0)
这样的事情:
>>> re.findall(r'(?:([^|\s]+)<(.+?)>)', 'hello, stack<overflow> / hello|fluid-<overflow>')
[('stack', 'overflow'), ('fluid-', 'overflow')]