python正则:给分支分组,可以直接获取匹配到的那个分支吗?
>>> 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果你只是为了拿8888,那可以把正则表达式改成前半部分能同时匹配
http://12306.cn?id=
和空即可