正则表达式匹配一个或多个数字

问题描述:

我得到的数据集这样的(它开辟为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。有人有想法如何处理这个?

+0

''out \ dmf \ d +''''''指定一个或多个匹配项。 –

让我们打破你的正则表达式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。