我有一个字典,其中不同的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%时才会执行。
我可以想到再次从数据包丢失中获取数据然后进行比较,但只是想知道是否有更好的方法来做到这一点?
如果有任何想法,请分享..
答案 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%