正则表达式匹配一个或多个数字
问题描述:
我得到的数据集这样的(它开辟为STR从文件):正则表达式匹配一个或多个数字
MF8='out1mf8':'constant',[1944.37578865883]
MF9='out1mf9':'constant',[2147.79853787502]
MF10='out1mf10':'constant',[565.635908155949]
MF11='out1mf11':'constant',[0]
MF12='out1mf12':'constant',[0]
我需要在括号中这个值,所以创建正则表达式:
outmfPattern = 'out\dmf\d'
并用:
re.findall(outmfPattern, f)
它的工作很好,直到mf = 9
。有人有想法如何处理这个?
答
让我们打破你的正则表达式out\dmf\d
:
-
out
序列'out'
-
\d
相匹配的数字 -
mf
匹配序列'mf'
-
\d
相匹配的数字
如果您想匹配out1mf11
之类的东西,您需要在末尾查找数字。
您可以使用out\dmf\d+
,或者,如果你想在年底匹配只有1或2数字,out\dmf\d{1,2}
。
In [373]: re.findall('out\dmf\d+', text)
Out[373]: ['out1mf8', 'out1mf9', 'out1mf10', 'out1mf11', 'out1mf12']
此外,如果你想括号添加到这些搜索条目的,你应该看看re.sub
代替:
In [377]: re.sub('(out\dmf\d+)', r'(\1)', text)
Out[377]: "MF8='(out1mf8)':'constant',[1944.37578865883] MF9='(out1mf9)':'constant',[2147.79853787502] MF10='(out1mf10)':'constant',[565.635908155949] MF11='(out1mf11)':'constant',[0] MF12='(out1mf12)':'constant',[0]"
re.sub
替换捕获组与包围的同在parens。
''out \ dmf \ d +''''''指定一个或多个匹配项。 –