Grupos de captura repetidos de Python

Estoy intentando analizar una serie de salidas de DETALLE DE VECINOS DE CDP para poder capturar cada dispositivo y su dirección IP.

El problema que estoy encontrando es que algunos dispositivos pueden tener múltiples direcciones IP asignadas, aquí hay un ejemplo de salida.

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 

Escribí esta expresión regular para capturar la entrada, y de acuerdo con gskinner coincide con las 4 direcciones IP, pero la captura es solo la última (como se esperaba de la expresión regular)

 Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)+ 

Así que me conecté en línea para averiguar cómo hacer esto. Intenté la expresión regular sugerida aquí Capturando subpatrones repetidos en la expresión regular de Python, pero el uso del módulo de expresión regular no cambió la salida. Todavía solo obtengo la última dirección IP en la lista, y ninguna de las otras.

Siguiendo el ejemplo que obtengo

 temp = regex.match(r'Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)+', file) print temp 

Temp devuelve ninguno.

Si lo hago findall. Recibo una devolución de solo la última dirección ip 84.252.100.3

Si agrego varios grupos de captura, como

 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 

Solo coincide con los que tienen direcciones IP mutliple, y no con los otros

Esperemos que alguien pueda ayudar.

Que yo sepa, solo .NET le permite iterar a través de grupos de captura cuantificados (repetidos). Considera esta alternativa (finita):

 Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+(?:IP address: ([0-9.]+)\s+)(?:IP address: ([0-9.]+)\s+)?(?:IP address: ([0-9.]+)\s+)?(?:IP address: ([0-9.]+)\s+)? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

Esto capturará 1 dirección IP en $2 y hasta tres más en $3 , $4 y $5 . (Estoy usando la notación de $ idiomáticamente, por supuesto). Puedes agregar tantas como quieras. Si necesita que todas las direcciones IP estén presentes en un solo grupo, es decir , $2 , entonces su única opción es incluir el texto con ellos:

 Device ID: ([0-9A-Za-z-.&]+)\s+Entry address\(es\):\s+((?:IP address: (?:[0-9.]+)\s+)+) ^ ^^ ^