Necesito probar una cadena contra varias expresiones regulares (exclusivas, es decir, una cadena que coincide con una de ellas no puede coincidir con ninguna otra), y ejecutar una pieza diferente de código dependiendo de con qué coincida. Lo que tengo actualmente es:¿Cómo busco a través de las coincidencias de expresiones regulares en Python?
m = firstre.match(str)
if m:
# Do something
m = secondre.match(str)
if m:
# Do something else
m = thirdre.match(str)
if m:
# Do something different from both
Aparte de la fealdad, el código coincide en contra de todas las expresiones regulares, incluso después de que ha emparejado a uno de ellos (por ejemplo firstre), que es ineficiente. Traté de usar:
elif m = secondre.match(str)
pero descubrí que la asignación no está permitida en las sentencias if.
¿Hay una forma elegante de lograr lo que quiero?
+1 por genialidad ptónica pura. Personalmente, colocaría la lista de tuplas fuera de la declaración for, p. 'match_functions = ((f1, re1), (f2, re2), ..)' y do 'for myfunc, myre in match_functions:' – Kimvais
No olvides agregar "break" para guardar intentando coincidir con el resto de la lista. –
Editado con las sugerencias de los comentarios más un ejemplo real. –