python正则:给分支分组,可以直接获取匹配到的那个分支吗?

发布于 2022-09-03 09:39:35 字数 1017 浏览 35 评论 0

>>> text1 = 'http://12306.cn?id=8888'
>>> text2 = '8888'
>>>
>>>
>>> result = re.search('.*[\?&]id=(\d+)|(\d+)', text1)
>>> print result.group(1)
8888
>>> print result.group(2)
None
>>>
>>>
>>> result = re.search('.*[\?&]id=(\d+)|(\d+)', text2)
>>> print result.group(1)
None
>>> print result.group(2)
8888

分支选中的结果永远在不同的组号里面,进一步使用匹配结果时,我们还要判断正则选中了哪个分支。
不用判断,有没有办法直接获得捕获的结果呢?

>>> result = re.search('.*[\?&]id=(?P<number>\d+)|(?P<number>\d+)', text1)

sre_constants.error: redefinition of group name 'number' as group 2; was group 1

首先想到的是给分组同一个别名,这样看起来result.group('number')就一步到位了
但是组名不允许重复,所以这种方法是不行的

只能:result.group(1) or result.group(2)(其实看起来还不错)

假如不用判断,很想知道正则里有没有直接解决这种问题的方法?(对这个问题困惑很久了)
类似result.group('number')一步到位效果


虽然采纳答案了,继续求其他思路

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡墨 2022-09-10 09:39:35
# 匹配两个分组,数字就都在第二组了
result = re.search('(.*[\?&]id=|^)(\d+)', text)
print(result.group(2))
乙白 2022-09-10 09:39:35

如果你只是为了拿8888,那可以把正则表达式改成前半部分能同时匹配http://12306.cn?id=和空即可

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文