gpt4 book ai didi

python - 如何在 Python 中使用 RegEx 选择简短的 Cisco 接口(interface)名称?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:12 25 4
gpt4 key购买 nike

我尝试从 CDP 中选择如下所示的缩短的 Cisco 接口(interface)名称,并使用 Python 和 RegEx 显示 MAC 地址表输出。

我尝试过 RegEx 测试器,Gig\s?\d+(/\d+)* 似乎工作得很好,但它在我的 Python 代码中不起作用。即使我试图逃避正斜杠,它似乎还是有点缺乏,我通过正则表达式文档得到了不同的意见。

DEVICENAME 演出 2/0/45 136 RT AIR-CAP35 演出 0

DEVICENAME 演出 2/0/47 158 RT AIR-CAP35 演出 0

DEVICENAME 千兆 1/0/1 174 R S I CISCO2921 千兆 0/1

DEVICENAME Gig 3/0/1 151 R S I CISCO2921 Gig 0/1

对于上面的 Gig 3/0/1 之类的输入,我得到的匹配看起来像/1、/2 等。请帮助解决我所缺少的内容,并且对 Python 对我的正则表达式做了什么的解释将不胜感激!

我尝试了各种正则表达式,例如 Gig\s?\d+ 并且它开始工作,但不会捕获扩展名称。当我开始添加时,例如 Gig\s?\d+/\d+/\d+ ,它工作得很棒,但它不会处理没有 3 组数字的名称,例如在 4500 上,它们将更像 Gig 4/30.当我添加分组以选择性地为线卡堆栈中进一步向下的接口(interface)添加/\d+ 时(例如在 3750 上),RegEx 很快就会在我可以在测试器中验证的内容与通过 Python 验证的内容之间崩溃。

如果我对最后一部分(例如 Gig\s?\d+((/\d+)*))进行双重分组,它就不再捕获第一部分,这真的让我失望。

最佳答案

您似乎使用了re.findall函数。注意,re.findall 为组提供了第一优先权。如果没有组存在,则只有它会返回匹配项。因此,我建议您将正则表达式中存在的捕获组转换为非捕获组。

r'Gig\s?\d+(?:/\d+)*'

代码:

>>> s = """DEVICENAME Gig 2/0/45 136 R T AIR-CAP35 Gig 0

DEVICENAME Gig 2/0/47 158 R T AIR-CAP35 Gig 0

DEVICENAME Gig 1/0/1 174 R S I CISCO2921 Gig 0/1

DEVICENAME Gig 3/0/1 151 R S I CISCO2921 Gig 0/1"""
>>> re.findall(r'Gig\s?\d+(?:/\d+)*', s)
['Gig 2/0/45', 'Gig 0', 'Gig 2/0/47', 'Gig 0', 'Gig 1/0/1', 'Gig 0/1', 'Gig 3/0/1', 'Gig 0/1']

关于python - 如何在 Python 中使用 RegEx 选择简短的 Cisco 接口(interface)名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com