编辑功能以进行循环搜索

问题描述 投票:0回答:1

我有原创功能:

def getpingresults():
    iplist = dict(load_devicefile())
    cmd = "/usr/sbin/fping -C 3 -A -q {}".format(" ".join(map(str, iplist.keys())))
    exitcode, out, results = get_fping_output(cmd)

    pingresults = []
    for aline in results.split("\n"):
            print('Working on line: {0}'.format(aline))
            if aline:
                    m = re.match(r"(\S+)\s+:\s(\S+)\s(\S+)\s(\S+)", aline)
                    ipaddress = m.group(1)
                    rtt = (float(m.group(2)) + float(m.group(3)) + float(m.group(4))) / 3
                    if rtt == '-':
                            iplist[ipaddress] += (float(9999),)
                    elif float(rtt) > 60:
                            iplist[ipaddress] += (float(rtt),)
                    else:
                            iplist[ipaddress] += (float(rtt),)

    print(iplist)
    return iplist

我需要编辑这个东西,以确保在任何这些m.group(2-4)变量中包含符号( - )。如果是 - 它应该(浮动(9999))。

所以,要在m.group(2)) + float(m.group(3)) + float(m.group(4)))进行搜索,我试图这样做:

for rtt in m.group(range(2,5)):
                         if rtt == '-':
                            iplist[ipaddress] += (float(9999),)
                         elif float(rtt) > 60:
                            iplist[ipaddress] += (float(rtt),)
                         else:
                            iplist[ipaddress] += (float(rtt),)

但我在这个for rtt in m.group(range(2,5)):上得到一个错误

 File "MassPing_mod.py", line 61, in getpingresults
for rtt in m.group(range(2,5)):

IndexError:没有这样的组

如何使循环匹配三个m.groups(2-4)

python regex match regex-group
1个回答
0
投票

你的语法是无稽之谈。你试图用生成器调用group,它正在期待一个数字。而是在外面使用发电机并从中拉出。

for rtt in (m.group(i) for i in range(2,5)):

虽然如果我可以推荐一些不同的东西,可以考虑在m.groups上使用元组splat-unpacking来使它更漂亮。

m = re.match(r"(\S+)\s+:\s(\S+)\s(\S+)\s(\S+)", aline)
ipaddress, *rtts = m.groups()
for rtt in rtts:
    # etc...
© www.soinside.com 2019 - 2024. All rights reserved.