Python:正则表达式组合进一个非分组版本的正则括号内

2024-06-16 18:14:53 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码导致

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

我想要的是[('stack', 'overflow'), ('fluid-', 'overflow')]。也就是说,我想忽略任何不匹配的组。我如何做到这一点?你知道吗


Tags: 代码rehellostackprintcompilefluidfindall
2条回答

将正则表达式更改为:

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

使用look behind断言管道字符|,但不将其包含在主匹配中。你知道吗

像这样:

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

相关问题 更多 >