Por favor vea mi código de patrón de expresión regular:
#!/usr/bin/env python # -*- coding:utf-8 -*- import re print 'Start' str1 = 'abcdefgasdsdfswossdfasdaef' m = re.match(r"([A-Za-z\-\s\:\.]+)+(\d+)\w+", str1) # Want to match something like 'Moto 360x' print m # None is expected. print 'Done'
Se tarda 49 segundos en terminar, ¿algún problema con el patrón?
Ver Runaway Regular Expressions: Retrocesos catastróficos .
En resumen, si hay muchas combinaciones, una subcadena se puede dividir en partes de la expresión regular, el comparador de expresiones regulares puede terminar probándolas todas.
Las construcciones como (x+)+
y x+x+
prácticamente garantizan este comportamiento.
Para detectar y corregir las construcciones problemáticas, se puede utilizar el siguiente concepto:
A nivel conceptual, la presencia de una construcción problemática significa que su expresión regular es ambigua , es decir, si ignora el comportamiento codicioso / perezoso, no existe una división “correcta” de parte del texto en las partes de la expresión regular (o, de manera equivalente, una subexpresión del mismo) ). Por lo tanto, para evitar / solucionar los problemas, debe ver y eliminar todas las ambigüedades.
Una forma de hacer esto es
Solo vuelva a publicar la respuesta y la solución en los comentarios de nhahtdh y Marc B:
([A-Za-z\-\s\:\.]+)+
-> [A-Za-z\-\s\:\.]+
Muchas gracias a nhahtdh y Marc B!