Я пытаюсь разобрать серию выводов 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+)+
Я вышли в интернет, чтобы выяснить, как это сделать. Я попробовал regex, предложенный здесь Capturing repeating subpatterns in Python regex, но с использованием модуля 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
Temp возвращает None.
Если я нахожусь. Я получаю возврат только последний 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
Это соответствует только те, которые имеют mutliple IP-адреса, а не другие
Надеюсь, кто-то может помочь.
Вы уверены, что вы будете следовать примеру тесно? (regex module) – nhahtdh
@nhahtdh Я обновил сообщение с ответами, которые получаю – iargue
Используйте 'search' вместо' match'. 'match' всегда начинается с начала строки. – nhahtdh