Accueil » Python » Forums Python » Forum général Python » Une regexp qui part en vrille

 • Une regexp qui part en vrille

Document Actions
Réponses: 1   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

 • Une regexp qui part en vrille

Posté par digitalfox le 05/01/2008 23:55
Bonsoir à tous,

Je suis face un pénible problème de regexp dont le temps d'exécution part en vrille. Selon le texte a cherché, cela met moins d'une seconde ou alors un temps très long (plus de 5 minutes en tout cas).

Voici les coupables :
code:
c="pomme@fraise.org,Citrouille.Carottes@potiron.choux.net,pomme-de-terre@petitpois.org"
r="(+\.?)*@(+\.?)*$"


Et la commande qui tue :
code:
import re
re.search(r, c)


Là, c'est CPU à 100% et impossible d'interrompre avec un control-C. Il faut faire un control-Z puis kill %1.

Le problème est reproductible avec Python 2.4.3 et 2.5.1 sous Linux. Je ne devrais pas le dire, mais cette regexp répond super vite avec Perl.

J'ai essayé d'activer le mode debug des regexp en passant le flag sre.DEBUG, mais selon mes tests je n'ai aucune sortie ou bien parfois cela :
code:
max_repeat 0 65535
  subpattern 1
    max_repeat 1 65535
      in
        range (65, 90)
        range (97, 122)
        literal 45
    max_repeat 0 1
      literal 46
literal 64
max_repeat 0 65535
  subpattern 2
    max_repeat 1 65535
      in
        range (97, 122)
    max_repeat 0 1
      literal 46
at at_end


Est-ce une bêtise dans la regexp ? Un bug ?

Par avance merci pour vos lumières, je vous avoue que je sèche un peu sur ce coup là.

 • Re: Une regexp qui part en vrille

Posté par thiedlecques le 06/01/2008 09:24
Les regex du module re ne sont pas toujours les mêmes qu'avec les autres languages (shell, lisp...)
perl je connais pas.
Effectivement ta regex elle tue!!
Si tu veux matcher des mails
essayes celle là:
code:
([\w\-][\w\-\.]+@[\w\-][\w\-\.]+{1,4})


Peut être connais tu kodos qui est trés bien pour les regex python
_________________________
A+ Thierry :http://gna.org/projects/proto-mail :http://gna.org/projects/python-calendar