python - 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
非常感谢你的想法!
解决方案
'|'
与组的索引无关,索引在正则表达式本身中总是从左到右计数。
在您原来的正则表达式中,它们是 6 组:
In [270]: m.groups()
Out[270]: (None, None, None, '12', '34', '567890')
匹配部分是第二部分,因此您需要:
In [271]: m.group(4)
Out[271]: '12'
推荐阅读
- api - 如何生成谷歌翻译 API 密钥
- python - 有没有更好的方法来加快 Pandas 读取 csv 文件的速度?
- ionic-framework - 编码完成后如何发布 Angular-Ionic 应用到商店
- vba - MS-Access 表单显示数字,而不是加载时的名称
- ruby-on-rails - 从数据库中删除回形针图像/文件时,我可以证明找不到 404
- python - 如何在 R 代码中从 python 调用变量
- unity3d - unity改变粒子材质而不改变其他粒子系统
- sql - 带有 INSERT 的 CTE 有时会执行两次该语句
- excel - 从填充了 For Each 循环的表中删除过时的值?
- reactjs - 如何在chartjs回调页脚函数中添加html标签