首页 > 解决方案 > Python Regex 在交替运算符后没有组

问题描述

我在 python 中编写了一个正则表达式匹配模式,但是 re.match() 在 | 之后不捕获组 交替运算符。

这是模式:

pattern = r"00([1-9]\d) ([1-9]\d) ([1-9]\d{5})|\+([1-9]\d) ([1-9]\d) ([1-9]\d{5})"

我用合格的字符串提供模式"+12 34 567890"

strng = "+12 34 567890"
pattern = r"00([1-9]\d) ([1-9]\d) ([1-9]\d{5})|\+([1-9]\d) ([1-9]\d) ([1-9]\d{5})"
m = re.match(pattern, strng)
print(m.group(1))

没有打印。

Buf 如果我删除之前的部分 | 交替运算符

strng = "+12 34 567890"

pattern = r"\+([1-9]\d) ([1-9]\d) ([1-9]\d{5})"
m = re.match(pattern, strng)
print(m.group(1))

它可以捕获所有 3 个组:

12
34
567890

非常感谢你的想法!

标签: pythonregex

解决方案


'|'与组的索引无关,索引在正则表达式本身中总是从左到右计数。

在您原来的正则表达式中,它们是 6 组:

In [270]: m.groups()
Out[270]: (None, None, None, '12', '34', '567890')

匹配部分是第二部分,因此您需要:

In [271]: m.group(4)
Out[271]: '12'

推荐阅读