我正在尝试解析一系列 SHOW CDP NEIGHBORS DETAIL 输出,以便捕获每个设备及其 IP 地址。
我遇到的问题是某些设备可能分配了多个 IP 地址,这是一个示例输出。
Device ID: RTPER1.MFN21Mb.domain.local
Entry address(es):
IP address: 200.152.51.3
IP address: 82.159.177.233
IP address: 201.152.51.140
IP address: 84.252.100.3
Platform: Cisco 2821, Capabilities: Router Switch IGMP
我编写了这个正则表达式来捕获输入,根据 gskinner 它匹配所有 4 个 ip 地址,但捕获只是最后一个(正如正则表达式所预期的那样)
Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)+
所以我上网想知道如何做到这一点。我尝试了此处建议的正则表达式Capturing repeating subpatterns in Python regex但使用正则表达式模块并没有改变输出。我仍然只得到列表中的最后一个 IP 地址,而没有其他的。
按照我得到的例子
temp = regex.match(r'Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)+', file)
print temp
临时返回无。
如果我确实找到了。我只返回最后一个 ip 地址 84.252.100.3
如果我添加多个捕获组,例如
temp = regex.findall(r'Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)?\s+(?:IP address: ([0-9.]+)\s+)?\s+(?:IP address: ([0-9.]+)\s+)?\s+(?:IP address: ([0-9.]+)\s+)?\s+(?:IP address: ([0-9.]+)\s+)?', file)
print temp
它只匹配具有多个 ip 地址的那些,而不匹配其他的
希望有人可以提供帮助。