我試圖解析一系列SHOW CDP NEIGHBORS DETAIL輸出,以便我可以捕獲每個設備及其IP地址。Python重複捕獲組
我遇到的問題是有些設備可能會分配多個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地址的,而不是其他
希望有人能幫助。
你確定你效仿的榜樣密切? (正則表達式模塊) – nhahtdh 2013-04-09 17:11:19
@nhahtdh我用我得到的回覆更新了我的帖子 – iargue 2013-04-09 17:26:49
使用'search'而不是'match'。 'match'總是從字符串的開頭開始。 – nhahtdh 2013-04-09 17:36:09