Python - Expressions régulières
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 refournit une prise en charge complète des 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 commer'expression'.
La fonction match
Cette fonction tente de faire correspondre le modèle RE à une chaîne avec des indicateurs facultatifs .
Voici la syntaxe de cette fonction -
re.match(pattern, string, flags=0)
Voici la description des paramètres -
N ° Sr. | Paramètre et description |
---|---|
1 | pattern Il s'agit de l'expression régulière à rechercher. |
2 | string Il s'agit de la chaîne qui sera recherchée pour correspondre au modèle au début de la chaîne. |
3 | flags Vous pouvez spécifier différents indicateurs en utilisant OU au niveau du bit (|). Ce sont des modificateurs, qui sont répertoriés dans le tableau ci-dessous. |
La fonction re.match renvoie unmatch objecter au succès, Noneen cas d'échec. Nous utilisons la fonction group (num) ou groups () dematch objet pour obtenir l'expression correspondante.
N ° Sr. | Match Object, méthode et description |
---|---|
1 | group(num=0) Cette méthode renvoie une correspondance complète (ou un numéro de sous-groupe spécifique) |
2 | groups() Cette méthode retourne tous les sous-groupes correspondants dans un tuple (vide s'il n'y en avait pas) |
Exemple
#!/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 fonction de recherche
Cette fonction recherche la première occurrence du modèle RE dans une chaîne avec des indicateurs facultatifs .
Voici la syntaxe de cette fonction -
re.search(pattern, string, flags=0)
Voici la description des paramètres -
N ° Sr. | Paramètre et description |
---|---|
1 | pattern Il s'agit de l'expression régulière à rechercher. |
2 | string Il s'agit de la chaîne qui sera recherchée pour correspondre au modèle n'importe où dans la chaîne. |
3 | flags Vous pouvez spécifier différents indicateurs en utilisant OU au niveau du bit (|). Ce sont des modificateurs, qui sont répertoriés dans le tableau ci-dessous. |
La fonction re.search renvoie unmatch objecter au succès, noneen cas d'échec. Nous utilisons la fonction group (num) ou groups () dematch objet pour obtenir l'expression correspondante.
N ° Sr. | Faire correspondre les méthodes et la description des objets |
---|---|
1 | group(num=0) Cette méthode renvoie une correspondance complète (ou un numéro de sous-groupe spécifique) |
2 | groups() Cette méthode retourne tous les sous-groupes correspondants dans un tuple (vide s'il n'y en avait pas) |
Exemple
#!/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 et recherche
Python propose deux opérations primitives différentes basées sur des expressions régulières: match vérifie une correspondance uniquement au début de la chaîne, tandis que search recherche une correspondance n'importe où dans la chaîne (c'est ce que fait Perl par défaut).
Exemple
#!/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 plus importants re 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 modèle RE dans la chaîne par repl , en remplaçant toutes les occurrences sauf si max est fourni. Cette méthode renvoie une chaîne modifiée.
Exemple
#!/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 de ces -
N ° Sr. | 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 des 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 ^ le début de n'importe quelle ligne (pas seulement le 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. Cet indicateur 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 dans un ensemble [] ou lorsqu'il est échappé par une barre oblique inverse) et traite les # sans échappement comme un marqueur de commentaire. |
Modèles d'expressions régulières
Sauf pour les caractères de contrôle, (+ ? . * ^ $ ( ) [ ] { } | \), tous les personnages se correspondent. Vous pouvez échapper un caractère de contrôle en le précédant d'une barre oblique inverse.
Le tableau suivant répertorie la syntaxe d'expression régulière disponible en Python -
N ° Sr. | Modèle 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 sauf le saut de ligne. L'utilisation de l'option m lui permet également de correspondre à la nouvelle ligne. |
4 | [...] Correspond à n'importe quel caractère unique entre crochets. |
5 | [^...] Correspond à n'importe quel caractère unique non entre crochets |
6 | re* Correspond à 0 occurrences ou plus de l'expression précédente. |
sept | re+ Correspond à une 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. |
dix | 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 | a| b Correspond à a ou b. |
13 | (re) Regroupe les expressions régulières et mémorise le texte correspondant. |
14 | (?imx) Bascule temporairement sur 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 | (?: re) Regroupe les expressions régulières sans se souvenir du 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 gamme. |
21 | (?! re) Spécifie la position à l'aide de la négation du motif. N'a pas de gamme. |
22 | (?> re) Correspond à un motif indépendant sans retour en arrière. |
23 | \w Correspond aux caractères des mots. |
24 | \W Correspond aux caractères non-mots. |
25 | \s Correspond aux espaces. Équivaut à [\ t \ n \ r \ f]. |
26 | \S Correspond à un espace non blanc. |
27 | \d Correspond aux chiffres. Équivalent à [0-9]. |
28 | \D Correspond aux 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'espace arrière (0x08) lorsqu'il est entre crochets. |
34 | \B Correspond aux limites non-mot. |
35 | \n, \t, etc. Correspond aux retours à la ligne, 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
N ° Sr. | Exemple et description |
---|---|
1 | python Correspond à "python". |
Classes de caractères
N ° Sr. | Exemple et description |
---|---|
1 | [Pp]ython Correspond à "Python" ou "python" |
2 | rub[ye] Correspondre à "ruby" ou "rube" |
3 | [aeiou] Correspond à n'importe quelle voyelle minuscule |
4 | [0-9] Correspond à 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 |
sept | [a-zA-Z0-9] Correspond à l'un des éléments ci-dessus |
8 | [^aeiou] Correspond à tout autre chose qu'une voyelle minuscule |
9 | [^0-9] Correspond à autre chose qu'un chiffre |
Classes de caractères spéciales
N ° Sr. | Exemple et description |
---|---|
1 | . Correspond à n'importe quel caractère sauf le saut de ligne |
2 | \d Faire correspondre un chiffre: [0-9] |
3 | \D Faire correspondre un non-chiffre: [^ 0-9] |
4 | \s Faire correspondre un caractère d'espacement: [\ t \ r \ n \ f] |
5 | \S Correspondre à un espace non blanc: [^ \ t \ r \ n \ f] |
6 | \w Faire correspondre un seul mot: [A-Za-z0-9_] |
sept | \W Correspond à un caractère non-mot: [^ A-Za-z0-9_] |
Cas de répétition
N ° Sr. | Exemple et description |
---|---|
1 | ruby? Correspond à "rub" ou "ruby": le y est facultatif |
2 | ruby* Correspond à "frotter" plus 0 ou plus de y |
3 | ruby+ Correspond à "frotter" plus 1 ou plus de y |
4 | \d{3} Correspond exactement à 3 chiffres |
5 | \d{3,} Correspond à 3 chiffres ou plus |
6 | \d{3,5} Correspond à 3, 4 ou 5 chiffres |
Répétition sans réverbération
Cela correspond au plus petit nombre de répétitions -
N ° Sr. | Exemple et description |
---|---|
1 | <.*> Répétition gourmande: correspond à "<python> perl>" |
2 | <.*?> Nongreedy: correspond à "<python>" dans "<python> perl>" |
Regroupement avec des parenthèses
N ° Sr. | Exemple et description |
---|---|
1 | \D\d+ Aucun groupe: + répète \ d |
2 | (\D\d)+ Groupé: + répète \ D \ d paire |
3 | ([Pp]ython(, )?)+ Faites correspondre "Python", "Python, python, python", etc. |
Références arrière
Cela correspond à nouveau à un groupe précédemment apparié -
N ° Sr. | Exemple et description |
---|---|
1 | ([Pp])ython&\1ails Match python & seaux ou Python & seaux |
2 | (['"])[^\1]*\1 Chaîne entre guillemets simples ou doubles. \ 1 correspond quel que soit le premier groupe correspondant. \ 2 correspond quel que soit le 2e groupe, etc. |
Alternatives
N ° Sr. | Exemple et description |
---|---|
1 | python|perl Correspond à "python" ou "perl" |
2 | rub(y|le)) Faire correspondre "rubis" ou "rouble" |
3 | Python(!+|\?) "Python" suivi d'un ou plusieurs! ou un ? |
Ancres
Cela doit spécifier la position de correspondance.
N ° Sr. | 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 |
sept | 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
N ° Sr. | Exemple et description |
---|---|
1 | R(?#comment) Correspond à "R". Tout le reste est un commentaire |
2 | R(?i)uby Insensible à la casse lors de la correspondance "uby" |
3 | R(?i:uby) Comme ci-dessus |
4 | rub(?:y|le)) Grouper uniquement sans créer \ 1 backreference |