python re.split字符串并将它们与字典匹配

时间:2017-05-09 12:44:49

标签: python regex string python-2.7

我有一些数据文件名已经形成了以下形式的字符串:

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。

2 个答案:

答案 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]

尝试对文件名使用特定模式可能会产生未提及的匹配,这些匹配未在您提到的刀片中定义。