Capturando subpatrones repetidos en expresiones regulares de Python
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 .tr
después de yasar@webmail
la parte, por lo que perdí .something
y .edu
los grupos. ¿Puedo hacer esto en expresiones regulares de Python, o sugeriría hacer coincidir todo al principio y dividir los subpatrones más tarde?
re
El módulo no admite capturas repetidas ( regex
lo 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 .
Puedes solucionar el problema de (\.\w+)+
capturar solo la última coincidencia haciendo esto:((?:\.\w+)+)