Programmation Python/Regex
Un livre de Wikibooks.
Syntaxe [modifier]
| Caractère | Type | explication |
|---|---|---|
| . | Point | n'importe quel caractère |
| [...] | classe de caractères | tous les caractères énumérés dans la classe |
| [^...] | classe complémentée | Tous les caractères sauf ceux énumérés |
| ^ | circonflexe | marque le début de la chaine, la ligne... |
| $ | dollar | marque la fin d'une chaine, ligne... |
| | | barre verticale | alternative - ou reconnaît l'un ou l'autre |
| (...) | parenthèse | utilisée pour limiter la portée d'un masque ou de l'alternative |
| * | astérisque | 0, 1 ou plusieurs occurrences |
| + | le plus | 1 ou plusieurs occurrence |
| ? | interrogation | 0 ou 1 occurrence |
Les expressions régulières en Python nécessitent le module re.
Recherche [modifier]
La fonction compile() renvoie None si l'expression rationnelle n'est pas trouvée dans la chaine.
La fonction search() renvoie la position des chaines recherchées.
#!/usr/bin/env python import re chaine = "Test regex Python pour Wikibooks francophone." if re.compile('Wikibooks').search(chaine): print "Position du mot Wikibooks : " print re.search(u'Wikibooks', chaine).start() # Affiche "23" print re.search(u'Wikibooks', chaine).end() # Affiche "32"
#!/usr/bin/env python # Affiche tous les mots qui commencent par "Wiki" import re chaine = "Wikilivre regex Python pour Wikibooks francophone." print (re.findall(r"Wiki\w+", chaine)) # Affiche ['Wikilivre', 'Wikibooks']
Remplacement [modifier]
#!/usr/bin/env python # Remplace tous les espaces par des underscores import re chaine = "Test regex Python pour Wikibooks francophone." chaineTriee = re.sub(r' ', "_", chaine) print chaineTriee # Affiche "Test_regex_Python_pour_Wikibooks_francophone."
Pour remplacer certains éléments en conservant ceux placés entre parenthèses, il faut les désigner par \1, \2, \3...
#!/usr/bin/env python # Ajoute des guillements à tous les mots suivent "livre" import re chaine = "Test regex Python pour le livre Python de Wikibooks francophone." chaineTriee = re.sub(r'(.*)livre (\w+)(.*)', r'\1livre "\2"\3', chaine) print chaineTriee # Affiche "Test regex Python pour le livre "Python" de Wikibooks francophone."