Python - Expressions régulières
Page PrécédentePage Suivante
Une expression régulière est une séquence spéciale de caractères qui vous aide à faire correspondre ou à trouver d'autres chaînes ou ensembles de chaînes, à l'aide d'une syntaxe spécialisée contenue dans un modèle. Les expressions régulières sont largement utilisées dans le monde UNIX.
Le module Python re fournit un support complet pour les expressions régulières de type Perl en Python. Le module re lève l'exception re.error si une erreur se produit lors de la compilation ou de l'utilisation d'une expression régulière.
Nous couvririons deux fonctions importantes, qui seraient utilisées pour gérer les expressions régulières. Mais une petite chose d'abord :il existe différents caractères, qui auraient une signification particulière lorsqu'ils sont utilisés dans une expression régulière. Pour éviter toute confusion lors du traitement des expressions régulières, nous utiliserions Raw Strings comme r'expression' .
Le match Fonction
Cette fonction tente de faire correspondre le motif RE à chaîne avec des drapeaux facultatifs .
Voici la syntaxe de cette fonction −
re.match(pattern, string, flags=0)
Voici la description des paramètres −
Sr.No. | Paramètre et description |
1 |
motif
Il s'agit de l'expression régulière à rechercher.
2 |
chaîne
Il s'agit de la chaîne qui serait recherchée pour correspondre au modèle au début de la chaîne.
3 |
drapeaux
Vous pouvez spécifier différents indicateurs à l'aide de l'opérateur OR au niveau du bit (|). Ce sont des modificateurs, qui sont répertoriés dans le tableau ci-dessous.
Le re.match la fonction renvoie une correspondance objet en cas de succès, Aucun en cas d'échec. Nous utilisons group(num) ou groupes() fonction de match objet pour obtenir l'expression correspondante.
Sr.No. | Faire correspondre la méthode et la description de l'objet |
1 |
groupe(num=0)
Cette méthode renvoie la correspondance entière (ou le numéro de sous-groupe spécifique)
2 |
groupes()
Cette méthode renvoie tous les sous-groupes correspondants dans un tuple (vide s'il n'y en avait pas)
Exemple
Démo en direct
#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)
else:
print "No match!!"
Lorsque le code ci-dessus est exécuté, il produit le résultat suivant −
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
La recherche Fonction
Cette fonction recherche la première occurrence de RE motif dans chaîne avec des drapeaux facultatifs .
Voici la syntaxe de cette fonction −
re.search(pattern, string, flags=0)
Voici la description des paramètres −
Sr.No. | Paramètre et description |
1 |
motif
Il s'agit de l'expression régulière à rechercher.
2 |
chaîne
Il s'agit de la chaîne, qui serait recherchée pour correspondre au modèle n'importe où dans la chaîne.
3 |
drapeaux
Vous pouvez spécifier différents indicateurs à l'aide de l'opérateur OR au niveau du bit (|). Ce sont des modificateurs, qui sont répertoriés dans le tableau ci-dessous.
La re.recherche la fonction renvoie une correspondance objet en cas de succès, aucun en cas d'échec. Nous utilisons group(num) ou groupes() fonction de match objet pour obtenir l'expression correspondante.
Sr.No. | Méthodes et description d'objet de correspondance |
1 |
groupe(num=0)
Cette méthode renvoie la correspondance entière (ou le numéro de sous-groupe spécifique)
2 |
groupes()
Cette méthode renvoie tous les sous-groupes correspondants dans un tuple (vide s'il n'y en avait pas)
Exemple
Démo en direct
#!/usr/bin/python
import re
line = "Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
print "searchObj.group() : ", searchObj.group()
print "searchObj.group(1) : ", searchObj.group(1)
print "searchObj.group(2) : ", searchObj.group(2)
else:
print "Nothing found!!"
Lorsque le code ci-dessus est exécuté, il produit le résultat suivant −
searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter
Correspondance contre recherche
Python propose deux opérations primitives différentes basées sur des expressions régulières :match recherche une correspondance uniquement au début de la chaîne, tandis que recherche recherche une correspondance n'importe où dans la chaîne (c'est ce que fait Perl par défaut).
Exemple
Démo en direct
#!/usr/bin/python
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print "match --> matchObj.group() : ", matchObj.group()
else:
print "No match!!"
searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
print "search --> searchObj.group() : ", searchObj.group()
else:
print "Nothing found!!"
Lorsque le code ci-dessus est exécuté, il produit le résultat suivant −
No match!!
search --> searchObj.group() : dogs
Rechercher et remplacer
L'un des re les plus importants les méthodes qui utilisent des expressions régulières est sub .
Syntaxe
re.sub(pattern, repl, string, max=0)
Cette méthode remplace toutes les occurrences du motif RE dans chaîne avec repl , en remplaçant toutes les occurrences sauf max fourni. Cette méthode renvoie la chaîne modifiée.
Exemple
Démo en direct
#!/usr/bin/python
import re
phone = "2004-959-559 # This is Phone Number"
# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print "Phone Num : ", num
# Remove anything other than digits
num = re.sub(r'\D', "", phone)
print "Phone Num : ", num
Lorsque le code ci-dessus est exécuté, il produit le résultat suivant −
Phone Num : 2004-959-559
Phone Num : 2004959559
Modificateurs d'expressions régulières :indicateurs d'option
Les littéraux d'expression régulière peuvent inclure un modificateur facultatif pour contrôler divers aspects de la correspondance. Les modificateurs sont spécifiés sous la forme d'un indicateur facultatif. Vous pouvez fournir plusieurs modificateurs en utilisant OU exclusif (|), comme indiqué précédemment et peut être représenté par l'un d'entre eux −
Sr.No. | Modificateur et description |
1 |
re.I
Effectue une correspondance insensible à la casse.
2 |
re.L
Interprète les mots en fonction des paramètres régionaux actuels. Cette interprétation affecte le groupe alphabétique (\w et \W), ainsi que le comportement des limites de mots (\b et \B).
3 |
re.M
Fait correspondre $ à la fin d'une ligne (pas seulement à la fin de la chaîne) et fait correspondre ^ au début de n'importe quelle ligne (pas seulement au début de la chaîne).
4 |
re.S
Fait correspondre un point (point) à n'importe quel caractère, y compris une nouvelle ligne.
5 |
re.U
Interprète les lettres selon le jeu de caractères Unicode. Ce drapeau affecte le comportement de \w, \W, \b, \B.
6 |
re.X
Permet une syntaxe d'expression régulière "plus mignonne". Il ignore les espaces (sauf à l'intérieur d'un ensemble [] ou lorsqu'ils sont échappés par une barre oblique inverse) et traite les # non échappés comme un marqueur de commentaire.
Modèles d'expressions régulières
Sauf pour les caractères de contrôle, (+ ? . * ^ $ ( ) [ ] { } | \) , tous les caractères correspondent à eux-mêmes. Vous pouvez échapper un caractère de contrôle en le faisant précéder d'une barre oblique inverse.
Le tableau suivant répertorie la syntaxe d'expression régulière disponible en Python −
Sr.No. | Motif et description |
1 |
^
Correspond au début de la ligne.
2 |
$
Correspond à la fin de la ligne.
3 |
.
Correspond à n'importe quel caractère unique à l'exception de la nouvelle ligne. L'utilisation de l'option m lui permet également de correspondre à la nouvelle ligne.
4 |
[...]
Correspond à n'importe quel caractère entre parenthèses.
5 |
[^...]
Correspond à n'importe quel caractère non entre parenthèses
6 |
re*
Correspond à 0 ou plusieurs occurrences de l'expression précédente.
7 |
re+
Correspond à 1 ou plusieurs occurrences de l'expression précédente.
8 |
re ?
Correspond à 0 ou 1 occurrence de l'expression précédente.
9 |
re{ n}
Correspond exactement au nombre n d'occurrences de l'expression précédente.
10 |
re{ n,}
Correspond à n occurrences ou plus de l'expression précédente.
11 |
re{ n, m}
Correspond à au moins n et au plus m occurrences de l'expression précédente.
12 |
un| b
Correspond à a ou b.
13 |
(re)
Regroupe les expressions régulières et mémorise le texte correspondant.
14 |
(?imx)
Active temporairement les options i, m ou x dans une expression régulière. Si entre parenthèses, seule cette zone est affectée.
15 |
(?-imx)
Désactive temporairement les options i, m ou x dans une expression régulière. Si entre parenthèses, seule cette zone est affectée.
16 |
(? : ré)
Regroupe les expressions régulières sans mémoriser le texte correspondant.
17 |
(?imx :re)
Active temporairement les options i, m ou x entre parenthèses.
18 |
(?-imx :re)
Désactive temporairement les options i, m ou x entre parenthèses.
19 |
(?#...)
Commentaire.
20 |
(?=re)
Spécifie la position à l'aide d'un motif. N'a pas de plage.
21 |
(?! re)
Spécifie la position à l'aide de la négation de motif. N'a pas de plage.
22 |
(?> re)
Correspond à un modèle indépendant sans retour en arrière.
23 |
\w
Correspond aux caractères du mot.
24 |
\W
Correspond à des caractères non verbaux.
25 |
\s
Correspond aux espaces blancs. Équivalent à [\t\n\r\f].
26 |
\S
Correspond à un espace non blanc.
27 |
\d
Correspond aux chiffres. Équivalent à [0-9].
28 |
\D
Correspond à des non-chiffres.
29 |
\A
Correspond au début de la chaîne.
30 |
\Z
Correspond à la fin de la chaîne. Si une nouvelle ligne existe, elle correspond juste avant la nouvelle ligne.
31 |
\z
Correspond à la fin de la chaîne.
32 |
\G
Correspond au point où le dernier match s'est terminé.
33 |
\b
Correspond aux limites des mots en dehors des crochets. Correspond à l'espacement arrière (0x08) lorsqu'il est entre parenthèses.
34 |
\B
Correspond aux limites des non-mots.
35 |
\n, \t, etc.
Correspond aux nouvelles lignes, aux retours chariot, aux tabulations, etc.
36 |
\1...\9
Correspond à la nième sous-expression groupée.
37 |
\10
Correspond à la nième sous-expression groupée si elle correspond déjà. Sinon fait référence à la représentation octale d'un code de caractère.
Exemples d'expressions régulières
Caractères littéraux
Sr.No. | Exemple et description |
1 |
python
Correspond à "python".
Classes de personnages
Sr.No. | Exemple et description |
1 |
[Pp]ython
Correspond à "Python" ou "python"
2 |
frottez[vous]
Faites correspondre "ruby" ou "rube"
3 |
[aeiou]
Correspond à n'importe quelle voyelle minuscule
4 |
[0-9]
Faites correspondre n'importe quel chiffre ; identique à [0123456789]
5 |
[a-z]
Correspond à n'importe quelle lettre ASCII minuscule
6 |
[A-Z]
Correspond à n'importe quelle lettre ASCII majuscule
7 |
[a-zA-Z0-9]
Correspond à l'un des éléments ci-dessus
8 |
[^aeiou]
Faites correspondre autre chose qu'une voyelle minuscule
9 |
[^0-9]
Faire correspondre autre chose qu'un chiffre
Classes de personnages spéciaux
Sr.No. | Exemple et description |
1 |
.
Correspond à n'importe quel caractère sauf la nouvelle ligne
2 |
\d
Faire correspondre un chiffre :[0-9]
3 |
\D
Correspond à un non-chiffre :[^0-9]
4 |
\s
Faites correspondre un caractère d'espace :[ \t\r\n\f]
5 |
\S
Correspondance non blanche :[^ \t\r\n\f]
6 |
\w
Faire correspondre un seul caractère de mot :[A-Za-z0-9_]
7 |
\W
Faire correspondre un caractère autre qu'un mot :[^A-Za-z0-9_]
Cas de répétition
Sr.No. | Exemple et description |
1 |
rubis ?
Faites correspondre "rub" ou "ruby" :le y est facultatif
2 |
rubis*
Correspond à "rub" plus 0 ou plus ys
3 |
rubis+
Faites correspondre "rub" plus 1 ou plusieurs oui
4 |
\d{3}
Faites correspondre exactement 3 chiffres
5 |
\d{3,}
Faites correspondre 3 chiffres ou plus
6 |
\d{3,5}
Faites correspondre 3, 4 ou 5 chiffres
Répétition non gourmande
Cela correspond au plus petit nombre de répétitions −
Sr.No. | Exemple et description |
1 |
<.*>
Répétition gourmande :correspond à "perl>"
2 |
<.*?>
Non gourmand :correspond à "" dans "perl>"
Grouper avec des parenthèses
Sr.No. | Exemple et description |
1 |
\D\d+
Pas de groupe :+ répète \d
2 |
(\D\d)+
Groupé :+ répétitions \D\d paire
3 |
([Pp]ython(, ) ?)+
Faites correspondre "Python", "Python, python, python", etc.
Références
Cela correspond à nouveau à un groupe précédemment apparié −
Sr.No. | Exemple et description |
1 |
([Pp])ython&\1ails
Faites correspondre python&pails ou Python&Pails
2 |
(['"])[^\1]*\1
Chaîne entre guillemets simples ou doubles. \1 correspond à tout ce qui correspond au 1er groupe. \2 correspond quel que soit le 2ème groupe correspondant, etc.
Alternatives
Sr.No. | Exemple et description |
1 |
python|perle
Correspond à "python" ou "perl"
2 |
frotter(y|le))
Correspond à "ruby" ou "rouble"
3 |
Python(!+|\?)
"Python" suivi d'un ou plusieurs ! ou un ?
Ancres
Cela doit spécifier la position de correspondance.
Sr.No. | Exemple et description |
1 |
^Python
Correspond à "Python" au début d'une chaîne ou d'une ligne interne
2 |
Python$
Correspond à "Python" à la fin d'une chaîne ou d'une ligne
3 |
\APython
Correspond à "Python" au début d'une chaîne
4 |
Python\Z
Correspond à "Python" à la fin d'une chaîne
5 |
\bPython\b
Faire correspondre "Python" à une limite de mot
6 |
\brub\B
\B n'est pas une limite de mot :correspond à "rub" dans "rube" et "ruby" mais pas seul
7 |
Python(?=!)
Correspond à "Python", s'il est suivi d'un point d'exclamation.
8 |
Python(?!!)
Correspond à "Python", s'il n'est pas suivi d'un point d'exclamation.
Syntaxe spéciale avec parenthèses
Sr.No. | Exemple et description |
1 |
R(?#commentaire)
Correspond à "R". Tout le reste est un commentaire
2 |
R(?i)uby
Insensible à la casse lors de la correspondance avec "uby"
3 |
R(?i:uby)
Comme ci-dessus
4 |
frotter(?:y|le))
Regrouper uniquement sans créer de \1 backreference