我有这样的数据集(它从文件中打开为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 :(得分:5)
让我们分解你的正则表达式out\dmf\d
:
out
匹配序列'out'
\d
匹配数字mf
匹配序列'mf'
\d
匹配数字如果您想匹配out1mf11
之类的内容,则需要在结尾处查找 2 位。
您可以使用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中的相同内容替换捕获的组。