Capturando subpatrones repetidos en expresiones regulares de Python

Resuelto yasar asked hace 12 años • 0 respuestas

Al hacer coincidir una dirección de correo electrónico, después de hacer coincidir algo como yasar@webmail, quiero capturar uno o más (\.\w+)(lo que estoy haciendo es un poco más complicado, esto es solo un ejemplo), intenté agregar (.\w+)+, pero solo captura el último partido. Por ejemplo, [email protected]los partidos solo se incluyen .trdespués de yasar@webmailla parte, por lo que perdí .somethingy .edulos grupos. ¿Puedo hacer esto en expresiones regulares de Python, o sugeriría hacer coincidir todo al principio y dividir los subpatrones más tarde?

yasar avatar Mar 19 '12 11:03 yasar
Aceptado

reEl módulo no admite capturas repetidas ( regexlo admite):

>>> m = regex.match(r'([.\w]+)@((\w+)(\.\w+)+)', '[email protected]')
>>> m.groups()
('yasar', 'webmail.something.edu.tr', 'webmail', '.tr')
>>> m.captures(4)
['.something', '.edu', '.tr']

En su caso, optaría por dividir los subpatrones repetidos más adelante. Conduce a un código simple y legible, por ejemplo, consulte el código en la respuesta de @Li-aung Yip .

jfs avatar Mar 19 '2012 05:03 jfs

Puedes solucionar el problema de (\.\w+)+capturar solo la última coincidencia haciendo esto:((?:\.\w+)+)

Taymon avatar Mar 19 '2012 04:03 Taymon