我想提取下面每个参数的数字:
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在字符串的":"以及";空间";。