在 Python 中只保留正则表达式中":"后的数字



我想提取下面每个参数的数字:

import re
parameters = '''
NO2: 42602
SO2: 42401
CO: 42101
'''

所需输出应为:['42602','42401','42101']

我第一次尝试re.findall(r'd+',parameters),但它也返回"0";2〃;从";NO2";以及";SO2";。

然后我尝试了re.findall(':.*',parameters),但它返回[': 42602', ': 42401', ': 42101']

如果我不能重命名";NO2";至";二氧化氮";,有没有办法只收集右边(":"之后(的数字?非常感谢。

如果不想使用捕获组,可以使用look-behind。

(?<=:s)d+

详细信息

  • (?<=:s):获取:s之后的字符串
  • d+:获取数字

我也在python上尝试了结果。

import re
parameters = '''
NO2: 42602
SO2: 42401
CO: 42101
'''
result = re.findall(r'(?<=:s)d+',parameters)
print (result)

结果

['42602', '42401', '42101']

您可以使用以下正则表达式来捕获数字

^s*w+:s(d+)$

因此,^在开始时断言该行开始处的位置。CCD_ 9意味着在内容之前可能存在0个或更多个空白。CCD_ 10匹配后面跟有":"以及空间;NO2:";。最后,(d+)匹配您想要作为一个组的以下数字。$与行的末尾匹配。

要将所有匹配项作为列表获取,您可以使用

matches = re.findall(r'^s*w+:s(d+)$', parameters, re.MULTILINE)

由于指定了re.MULTILINE

模式字符"^"在字符串的开头匹配,并且在每行的开头。

如文档中所述。

结果如下

>> print(matches)
['42602', '42401', '42101']

要放入我的两美分,你可以简单地使用

re.findall(r'(bd+b)', parameters)

请参阅regex101.com上的演示。


如果您的字符串中碰巧有其他数字浮动,请使用更精确

w+:s*(d+)

请参阅regex101.com上的另一个演示。

re.findall(r'(?<=:s)d+', parameters)

应该有效。您可以从这里了解更多关于look-behind的信息。

您只需要指定要在字符串中搜索数字的位置,就可以使用:

re.findall(r': (d+)', parameters)

这个命令告诉Python在字符串的":"以及";空间";。

最新更新