Python正则表达式 - 匹配,比较和决定

时间:2014-12-20 18:20:59

标签: python regex dictionary

我有一个字典,其中不同的Ip作为Key,其ping结果作为Value。我想只在ping结果通过某个标准

时继续我的脚本

假设以下作为ping结果(字典值):

10 packets transmitted, 10 packets received, 0.00% packet loss

我创建了一个正则表达式并提取了每个值,如下所示:

match = re.search(r'(\d+\s* packet\w* transmitted), (\d+\s* packet\w* received), (\d+\.\d+ packet loss)',str,re.M|re.I)

>>> match.group(3)
'10.00% packet loss'

我已经提取了值..

现在我想编写一个带有条件的正则表达式,通过该条件,我将要求脚本继续执行,只有当我的字典中每个Ip的数据包丢失百分比小于5%时才会执行。

我可以想到再次从数据包丢失中获取数据然后进行比较,但只是想知道是否有更好的方法来做到这一点?

如果有任何想法,请分享..

2 个答案:

答案 0 :(得分:2)

您只能匹配感兴趣的部分,并且只能使用正则表达式匹配小于5%的数字:

match = re.search(r' +[0-4]\.\d+% packet loss', str, re.M | re.I)
if match:
    do_stuff_with_match()

但请注意,正则表达式比数值比较慢得多,因此您可能仍希望使用先前解析的结果。

答案 1 :(得分:2)

你不需要正则表达式:

s = "10 packets transmitted, 10 packets received, 0.00% packet loss"
trans,recv,loss = s.split(",")

print(trans,recv,loss)
('10 packets transmitted', ' 10 packets received', ' 0.00% packet loss')
print(float(loss.split("%")[0] > 5))
False

如果你有一个词典,请使用all检查每个值是否为> 5%