Une expression régulière permet notamment de vérifier qu'une chaîne de caractères correspond bien à un motif donné (un format d'email, par exemple).
Mais attention, pour être opérationnelle, une expression régulière doit être transformée en une machine à états (state machine, en anglais).
Cette transformation (on parle aussi de compilation d'expression régulière) n'est pas instantanée : si vous devez utiliser une expression régulière plus qu'une
fois, il est vivement conseillé de la compiler une fois pour toute via la fonction re.compile
.
re.match
recompile l'expression régulière à chaque appel. Il est donc conseillé de l'utiliser que pour une utilisation unique d'une
expression régulière.
L'exemple de code suivant teste plusieurs utilisations de la fonction re.match
(un seul appel aurait été trop rapide) est affiche le temps passé.
Ensuite, il procède à un test équivalent basé sur la fonction re.compile
et sur l'utilisation de la machine à état ainsi produite.
Les résultats sont sans appel : grâce à la compilation de l'expression régulière, on réduit par deux le temps d'exécution !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/usr/bin/python3 # -*- coding: utf-8 -*- import re import time loop = 10000000 email = "name@societe.com" email_re = r"^[\w.-]+@[\w.-]+\.[a-z]{2,}$" # On test plusieurs fois l'expression régulière sans la compiler. begin = time.time() for loop in range( loop ): assert re.match( email_re, email ) end = time.time() print( "Without compilation - Duration %d secs" % int(end - begin) ) email_compiled = re.compile( email_re ) # On test plusieurs fois l'expression régulière aprés l'avoir compilée. begin = time.time() for loop in range( loop ): assert email_compiled.match( email ) end = time.time() print( "With compilation - Duration %d secs" % int(end - begin) ) |
Et voici les résultats produits par cet exemple (les temps sont, bien entendu, dépendants de votre puissance de calcul) :
$> python3 compilation.py Without compilation - Duration 11 secs With compilation - Duration 5 secs $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :