Une fois l'expression rationnelle compilée, il faut l'utiliser.
Les instances RegexObject possèdent diverses méthodes, dont :
Les deux premières méthodes renvoient :
Donnons quelques exemples :
>>> import re >>> p = re.compile('[a-z]+') >>> p <_sre.SRE_Pattern object at 80c3c28> >>> p.match("") >>> print p.match("") None >>> m = p.match( 'tempo') >>> print m <_sre.SRE_Match object at 80c4f68>
Quand on a un objet MatchObjects, i.e. qu'un motif a été trouvé, les méthodes suivantes peuvent s'appliquer :
Reprenons l'exemple ci-dessus :
>>> import re >>> p = re.compile('[a-z]+') >>> m = p.match( 'tempo') >>> m.group() 'tempo' >>> m.start(), m.end() (0, 5) >>> m.span() (0, 5)
La méthode match de la classe RegexObject ne vérifie, on le rappelle, la présence du motif qu'au début de la chaîne. Ainsi, si une correspondance a été trouvée, et qu'un objet MatchObjects a donc été créé, la méthode start() de cet objet renverra toujours 0.
Cela n'est pas le cas pour la méthode RegexObject.search(), qui recherche des correspondances dans toute la chaîne :
>>> import re >>> p = re.compile('[a-z]+') >>> print p.match('::: message') None >>> m = p.search('::: message') ; print m <re.MatchObject instance at 80c9650> >>> m.group() 'message' >>> m.span() (4, 11)
Voici un canevas d'utilisation de ce qui précède :
>>> p = re.compile( r'expression rationnelle' )
>>> if m: ... print 'Correspondance trouvée : ', m.group() ... else: ... print 'Aucune correspondance.'
Pour finir cette partie, donnons des exemples d'utilisation des méthodes findall() et finditer().
findall() renvoie la liste des correspondances trouvées...
>>> p = re.compile('\d+') >>> p.findall('12 drummers drumming, 11 pipers piping, 10 lords a-leaping') ['12', '11', '10']
findall() doit donc trouver toutes les correspondances, avant de retourner leur liste, ce qui peut poser problème : prendre du temps, encombrer la mémoire, renvoyer un objet trop grand pour être exploitable...
Si cela pose problème, on peut utiliser la méthode finditer() qui renvoie la suite des correspondances au travers d'un iterateur :
>>> iterateur = p.finditer('12 drummers drumming, 11 ... 10 ...') >>> iterateur <callable-iterator object at 0x401833ac> >>> for correspondance in iterateur: ... print correspondance.span() ... (0, 2) (22, 24) (29, 31)