各デバイスとその IP アドレスをキャプチャできるように、一連の SHOW CDP NEIGHBORS DETAIL 出力を解析しようとしています。
私が直面している問題は、一部のデバイスに複数の 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+)+
そこで私はオンラインでこれを行う方法を見つけました。ここで提案されている正規表現を試してみました Python regex で繰り返しサブパターンをキャプチャしていますが、正規表現モジュールを使用しても出力は変わりませんでした。リストの最後のIPアドレスしか取得できず、他のIPアドレスは取得できません。
私が得る例に従って
temp = regex.match(r'Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)+', file)
print temp
Temp は None を返します。
私がfindallを行う場合。最後の 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 アドレスを持つものにのみ一致し、他のものには一致しません
うまくいけば、誰かが助けてくれるでしょう。