首页 > 解决方案 > 解析字符串以获取特定字符之前和之后的数字

问题描述

我试图X从这个字符串中解析数字之前和之后的数字,但无法获取所有数字。有人可以帮我指出我在这里缺少什么吗?

>>> import re
>>> f = "abc_xyz1024X137M4B4abc_xyz"
>>> re.findall(".*\w+(\d+)X(\d+).*", f)
[('4', '137')]

标签: pythonregex

解决方案


请注意,.*\w+(\d+)X(\d+).*首先尽可能多地抓取所有 0+ 字符(整个字符串),然后尝试匹配后续模式。\w+回溯到下一个字符是之前的数字X,因此第一个捕获组只包含之前的单个数字X,第二个捕获组包含之后的所有数字X。检查.*\w+(\d+)X(\d+).*调试器页面

您应该只匹配并捕获数字,然后匹配X然后再次匹配并捕获数字。

您可以使用

import re
f = "abc_xyz1024X137M4B4abc_xyz"
print(re.findall(r"(\d+)X(\d+)", f))
# => [('1024', '137')]

或者,如果您只对场比赛感兴趣:

m = re.search(r"(?P<x>\d+)X(?P<y>\d+)", f)
if m:
    print(m.groupdict()) # => {'y': '137', 'x': '1024'}

请参阅Python 演示正则表达式演示


推荐阅读