我有一些数据文件名已经形成了以下形式的字符串:
str = ('6m5.dat','10ext.dat','3m10.dat','3int.dat')
我想提取字符串' int',' ext',' m5'或' m10'从中,了解我正在使用哪些数据。我看到应该可以使用正则表达式,该表达式在开头考虑未知数量的数字,并且' .dat'到底。有人可以帮忙吗?
此后,我需要将字符串与数字列表匹配,以将我的值乘以:
extblade = 5.44852e-5
intblade = 5.44852e-5
m3blade = 1.812e-5
m5blade = 2.25e-5
m10blade = 6e-5
E.g。当字符串匹配' int'它应该设置x = 5.44852e-5。
答案 0 :(得分:2)
您可以使用以下模式
'\d+(\w+\d*)'
要匹配字符串,首先我将这些值添加到dict
d = {'extblade' : 5.44852e-5,
'intblade' : 5.44852e-5,
'm3blade' : 1.812e-5,
'm5blade' : 2.25e-5,
'm10blade' : 6e-5}
所以要使用你的正则表达式
>>> [re.match('\d+(\w+\d*)', i).group(1) for i in s]
['m5', 'ext', 'm10', 'int']
然后阅读dict
>>> [d[re.match('\d+(\w+\d*)', i).group(1)+'blade'] for i in s]
[2.25e-05, 5.44852e-05, 6e-05, 5.44852e-05]
答案 1 :(得分:1)
由于您没有明确定义文件的格式,似乎唯一正确的解决方案是使用以下模式:
regexp = r"((int)|(ext)|(m3)|(m5)|(m10))"
然后将匹配的文本与blads字典中的值匹配:
f = '6m5.dat','10ext.dat','3m10.dat','3int.dat'
d = {'ext' : 5.44852e-5,
'int' : 5.44852e-5,
'm3' : 1.812e-5,
'm5' : 2.25e-5,
'm10' : 6e-5,
}
import re
rx = re.compile(regexp)
result = [ d[m.group(0)] if m else None for m in (rx.search(s) for s in f)]
[2.25e-05, 5.44852e-05, 6e-05, 5.44852e-05]
尝试对文件名使用特定模式可能会产生未提及的匹配,这些匹配未在您提到的刀片中定义。