Expressions régulières Python
Une expression régulière est une séquence spéciale de caractères qui vous aide à vérifier facilement si une chaîne correspond à un certain motif.
Python a ajouté le module re depuis la version 1.5, qui fournit des motifs d'expressions régulières de style Perl.
Le module re offre au langage Python toutes les fonctionnalités des expressions régulières.
La fonction compile génère un objet d'expression régulière à partir d'une chaîne de motif et de paramètres d'indicateurs optionnels. Cet objet possède une série de méthodes pour la correspondance et le remplacement d'expressions régulières.
Le module re fournit également des fonctions entièrement cohérentes avec les fonctionnalités de ces méthodes. Ces fonctions utilisent une chaîne de motif comme premier paramètre.
Ce chapitre présente principalement les fonctions de traitement des expressions régulières couramment utilisées en Python.
Fonction re.match
re.match tente de faire correspondre un motif depuis le début de la chaîne. Si la correspondance n'est pas réussie à la position de départ, match() renvoie None.
Syntaxe de la fonction:
re.match(pattern, string, flags=0)
Description des paramètres de la fonction :
| Paramètre | Description |
|---|---|
| pattern | L'expression régulière à faire correspondre. |
| string | La chaîne à faire correspondre. |
| indicateurs | Indicateurs, utilisés pour contrôler le mode de correspondance de l'expression régulière, tels que : sensibilité à la casse, correspondance multiligne, etc. Voir :Modificateurs d'expression régulière - Indicateurs facultatifs |
Si la correspondance est réussie, la méthode re.match renvoie un objet de correspondance, sinon elle renvoie None.
Nous pouvons utiliser les fonctions group(num) ou groups() de l'objet de correspondance pour obtenir l'expression correspondante.
| Méthodes de l'objet de correspondance | Description |
|---|---|
| group(num=0) | La chaîne de toute l'expression correspondante. group() peut prendre plusieurs numéros de groupe à la fois, auquel cas il renvoie un tuple contenant les valeurs correspondant à ces groupes. |
| groups() | Renvoie un tuple contenant toutes les chaînes des sous-groupes, de 1 au nombre de sous-groupes contenus. |
Exemple
La sortie de l'exemple ci-dessus est :
(0, 3) None
Exemple
Le résultat de l'exemple ci-dessus est le suivant :
matchObj.group() : Cats are smarter than dogs matchObj.group(1) : Cats matchObj.group(2) : smarter
méthode re.search
re.search parcourt toute la chaîne et renvoie la première correspondance réussie.
Syntaxe de la fonction :
re.search(pattern, string, flags=0)
Description des paramètres de la fonction :
| Paramètre | Description |
|---|---|
| pattern | L'expression régulière à faire correspondre. |
| string | La chaîne à faire correspondre. |
| indicateurs | Options, utilisées pour contrôler la méthode de correspondance de l'expression régulière, telles que : sensibilité à la casse, correspondance multiligne, etc. |
Si la correspondance est réussie, la méthode re.search renvoie un objet de correspondance, sinon elle renvoie None.
Nous pouvons utiliser les fonctions group(num) ou groups() de l'objet de correspondance pour obtenir l'expression correspondante.
| Méthodes de l'objet de correspondance | Description |
|---|---|
| group(num=0) | La chaîne de toute l'expression correspondante. group() peut prendre plusieurs numéros de groupe à la fois, auquel cas il renvoie un tuple contenant les valeurs correspondant à ces groupes. |
| groups() | Renvoie un tuple contenant toutes les chaînes des sous-groupes, de 1 au nombre de sous-groupes contenus. |
Exemple
La sortie de l'exemple ci-dessus est :
(0, 3) (11, 14)
Exemple
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
Différence entre re.match et re.search
re.match ne correspond qu'au début de la chaîne. Si le début de la chaîne ne correspond pas à l'expression régulière, la correspondance échoue et la fonction renvoie None ; tandis que re.search parcourt toute la chaîne jusqu'à ce qu'une correspondance soit trouvée.
Exemple
No match!! search --> searchObj.group() : dogs
Rechercher et remplacer
Le module re de Python fournit re.sub pour remplacer les correspondances dans une chaîne.
Syntaxe :
re.sub(pattern, repl, string, count=0, flags=0)
Paramètres :
- pattern : La chaîne de motif dans l'expression régulière.
- repl : La chaîne de remplacement, peut aussi être une fonction.
- string : La chaîne d'origine à rechercher et remplacer.
- count : Le nombre maximum de remplacements après correspondance du motif, la valeur par défaut 0 signifie remplacer toutes les correspondances.
Exemple
电话号码是: 2004-959-559 电话号码是 : 2004959559
Le paramètre repl est une fonction
Dans l'exemple suivant, les nombres correspondants dans la chaîne sont multipliés par 2:
Exemple
La sortie après exécution est :
A46G8HFD1134
Fonction re.compile
La fonction compile est utilisée pour compiler une expression régulière et générer un objet d'expression régulière (Pattern), qui peut être utilisé par des fonctions telles que match(), search() et findall().
Le format de syntaxe est:
re.compile(pattern[, flags])
Paramètres :
-
pattern: Une expression régulière sous forme de chaîne
-
flags: Facultatif, représentant le mode de correspondance, comme ignorer la casse, le mode multiligne, etc. Les paramètres spécifiques sont :
- re.IIgnorer la casse
- re.LIndique que les jeux de caractères spéciaux \w, \W, \b, \B, \s, \S dépendent de l'environnement actuel
- re.MMode multiligne
- re.SC'est-à-dire.Et tout caractère, y compris le saut de ligne (.Sauf le saut de ligne)
- re.UIndique que les jeux de caractères spéciaux \w, \W, \b, \B, \d, \D, \s, \S dépendent de la base de données des propriétés des caractères Unicode
- re.XPour améliorer la lisibilité, ignorer les espaces et#les commentaires après
Exemple
Exemple
Ci-dessus, lors d'une correspondance réussie, un objet Match est renvoyé, où :
group([group1, …])La méthode est utilisée pour obtenir la chaîne mise en correspondance par un ou plusieurs groupes. Lorsque vous voulez obtenir toute la sous-chaîne correspondante, vous pouvez directement utilisergroup()ougroup(0);start([group])La méthode est utilisée pour obtenir la position de début de la sous-chaîne mise en correspondance par un groupe dans la chaîne entière (l'index du premier caractère de la sous-chaîne), avec une valeur de paramètre par défaut de 0;end([group])La méthode est utilisée pour obtenir la position de fin de la sous-chaîne mise en correspondance par un groupe dans la chaîne entière (l'index du dernier caractère de la sous-chaîne + 1), avec une valeur de paramètre par défaut de 0;span([group])La méthode renvoie(start(group), end(group))。
Regardons un autre exemple :
Exemple
findall
Trouve toutes les sous-chaînes correspondant à l'expression régulière dans la chaîne et renvoie une liste. S'il y a plusieurs motifs correspondants, il renvoie une liste de tuples. Si aucune correspondance n'est trouvée, il renvoie une liste vide.
Remarque :match et search ne correspondent qu'une fois, tandis que findall trouve toutes les correspondances.
Le format de syntaxe est:
findall(string[, pos[, endpos]])
Paramètres :
- string: La chaîne à mettre en correspondance.
- pos: Paramètre facultatif, indique la position de début de la chaîne, vaut 0 par défaut.
- endpos: Paramètre facultatif, indique la position de fin de la chaîne, vaut par défaut la longueur de la chaîne.
Trouver tous les nombres dans la chaîne :
Exemple
Résultat de sortie :
['123', '456'] ['88', '12']
Plusieurs motifs correspondants, renvoie une liste de tuples :
Exemple
result = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result)
[('width', '20'), ('height', '10')]
re.finditer
Semblable à findall, trouve toutes les sous-chaînes correspondant à l'expression régulière dans la chaîne et les renvoie sous forme d'itérateur.
re.finditer(pattern, string, flags=0)
Paramètres :
| Paramètre | Description |
|---|---|
| pattern | L'expression régulière à faire correspondre. |
| string | La chaîne à faire correspondre. |
| indicateurs | Indicateurs, utilisés pour contrôler le comportement de correspondance de l'expression régulière, comme la sensibilité à la casse, la correspondance multiligne, etc. Voir :Modificateurs d'expression régulière - indicateurs facultatifs |
Exemple
Résultat de sortie :
12 32 43 3
re.split
La méthode split divise la chaîne selon les sous-chaînes qui peuvent être mises en correspondance et renvoie une liste. Sa forme d'utilisation est la suivante :
re.split(pattern, string[, maxsplit=0, flags=0])
Paramètres :
| Paramètre | Description |
|---|---|
| pattern | L'expression régulière à faire correspondre. |
| string | La chaîne à faire correspondre. |
| maxsplit | Nombre maximal de divisions. maxsplit=1 signifie diviser une fois. La valeur par défaut est 0, ce qui signifie aucune limite. |
| indicateurs | Indicateurs, utilisés pour contrôler le comportement de correspondance de l'expression régulière, comme la sensibilité à la casse, la correspondance multiligne, etc. Voir :Modificateurs d'expression régulière - indicateurs facultatifs |
Exemple
Objet d'expression régulière
re.RegexObject
re.compile() renvoie un objet RegexObject.
re.MatchObject
group() renvoie la chaîne correspondant à l'expression régulière.
- start()Renvoie la position de début de la correspondance
- end()Renvoie la position de fin de la correspondance
- span()Renvoie un tuple contenant les positions (start, end) de la correspondance
Modificateurs d'expressions régulières - Drapeaux facultatifs
Les expressions régulières peuvent contenir des modificateurs de drapeau facultatifs pour contrôler le motif de correspondance. Les modificateurs sont spécifiés sous la forme d'un drapeau facultatif. Plusieurs drapeaux peuvent être spécifiés en les combinant par OU bit à bit (|). Par exemple, re.I | re.M définit à la fois les drapeaux I et M :
| Modificateur | Description |
|---|---|
| re.I | Rend la correspondance insensible à la casse |
| re.L | Effectue une correspondance tenant compte de la locale |
| re.M | Correspondance multiligne, affecte ^ et $ |
| re.S | Fait correspondre . à tous les caractères, y compris le saut de ligne. |
| re.U | Analyse les caractères selon le jeu de caractères Unicode. Cet indicateur affecte \w, \W, \b, \B. |
| re.X | Cet indicateur offre un format plus flexible, ce qui vous permet d'écrire des expressions régulières plus faciles à comprendre. |
Motifs d'expressions régulières
Les chaînes de motif utilisent une syntaxe spéciale pour représenter une expression régulière :
Les lettres et les chiffres se représentent eux-mêmes. Les lettres et les chiffres dans un motif d'expression régulière correspondent aux mêmes chaînes.
La plupart des lettres et des chiffres ont une signification différente lorsqu'ils sont précédés d'une barre oblique inverse.
Les caractères de ponctuation ne correspondent à eux-mêmes que lorsqu'ils sont échappés ; sinon, ils représentent des significations spéciales.
La barre oblique inverse elle-même doit être échappée avec une barre oblique inverse.
Comme les expressions régulières contiennent souvent des barres obliques inverses, il vaut mieux utiliser des chaînes brutes pour les représenter. Les éléments de motif (tels que r'\t', équivalent à '\\t') correspondent aux caractères spéciaux correspondants.
Le tableau suivant répertorie les éléments spéciaux de la syntaxe des motifs d'expressions régulières. Si vous fournissez des paramètres d'indicateurs facultatifs lors de l'utilisation d'un motif, la signification de certains éléments de motif peut changer.
| Modèle | Description |
|---|---|
| ^ | Correspond au début de la chaîne. |
| $ | Correspond à la fin de la chaîne. |
| . | Correspond à tout caractère sauf le saut de ligne. Lorsque l'indicateur re.DOTALL est spécifié, il peut correspondre à n'importe quel caractère, y compris le saut de ligne. |
| [...] | Utilisé pour représenter un ensemble de caractères, listés individuellement : [amk] correspond à 'a', 'm' ou 'k' |
| [^...] | Caractères qui ne sont pas dans [] : [^abc] correspond à tout caractère sauf a, b, c. |
| re* | Correspond à zéro ou plusieurs occurrences de l'expression. |
| re+ | Correspond à une ou plusieurs occurrences de l'expression. |
| re? | Correspond à 0 ou 1 occurrence du fragment défini par l'expression régulière précédente, de manière non gourmande |
| re{ n} | Correspond exactement à n occurrences de l'expression précédente. Par exemple,o{2}Il ne peut pas correspondre au 'o' dans "Bob", mais il peut correspondre aux deux 'o' dans "food". |
| re{ n,} | Correspond à n occurrences ou plus de l'expression précédente. Par exemple, o{2,} ne peut pas correspondre au 'o' dans "Bob", mais il peut correspondre à tous les 'o' dans "foooood". "o{1,}" équivaut à "o+". "o{0,}" équivaut à "o*". |
| re{ n, m} | Correspond à un nombre d'occurrences compris entre n et m du fragment défini par l'expression régulière précédente, de manière gourmande |
| a| b | Correspond à a ou b |
| (re) | Groupe l'expression régulière et mémorise le texte correspondant |
| (?imx) | Une expression régulière contient trois options facultatives : i, m ou x. Affecte uniquement la zone à l’intérieur des parenthèses. |
| (?-imx) | L’expression régulière désactive les options facultatives i, m ou x. Affecte uniquement la zone à l’intérieur des parenthèses. |
| (?: re) | Semblable à (...), mais ne représente pas un groupe |
| (?imx: re) | Utilise les options facultatives i, m ou x à l’intérieur des parenthèses |
| (?-imx: re) | N’utilise pas les options facultatives i, m ou x à l’intérieur des parenthèses |
| (?#...) | Commentaire. |
| (?= re) | Assertion positive d’anticipation. Si l’expression régulière contenue, représentée par ..., correspond avec succès à la position actuelle, elle réussit ; sinon, elle échoue. Mais une fois que l’expression contenue a été tentée, le moteur de correspondance n’avance pas ; le reste du motif doit encore être essayé à droite de l’assertion. |
| (?! re) | Assertion d'anticipation négative. Opposée de l'assertion positive ; réussit lorsque l'expression contenue ne peut pas correspondre à la position actuelle dans la chaîne. |
| (?> re) | Correspond à un motif indépendant, éliminant le retour arrière. |
| \w | Correspond aux lettres, aux chiffres et aux traits de soulignement |
| \W | Correspond à tout, sauf aux lettres, aux chiffres et aux traits de soulignement |
| \s | Correspond à tout caractère d'espacement, équivalent à[ \t\n\r\f]。 |
| \S | Correspond à tout caractère autre qu'un caractère d'espacement |
| \d | Correspond à tout chiffre, équivalent à [0-9]. |
| \D | Correspond à tout non-chiffre |
| \A | Correspond au début de la chaîne |
| \Z | Correspond à la fin de la chaîne. S'il y a un saut de ligne, il ne correspond qu'à la fin de la chaîne avant le saut de ligne. |
| \z | Correspond à la fin de la chaîne |
| \G | Correspond à la position où la dernière correspondance s'est terminée. |
| \b | Correspond à une limite de mot, c'est-à-dire la position entre un mot et un espace. Par exemple, 'er\b' peut correspondre au 'er' dans "never", mais ne peut pas correspondre au 'er' dans "verb". |
| \B | Correspond à une limite de non-mot. 'er\B' peut correspondre au 'er' dans "verb", mais ne peut pas correspondre au 'er' dans "never". |
| \n, \t, etc. | Correspond à un caractère de nouvelle ligne. Correspond à un caractère de tabulation. etc. |
| \1...\9 | Correspond au contenu du n-ième groupe. |
| \10 | Correspond au contenu du n-ième groupe si celui-ci a été mis en correspondance. Sinon, cela fait référence à une expression de code de caractère octal. |
Exemples d'expressions régulières
Correspondance de caractères
| Exemple | Description |
|---|---|
| python | Correspond à "python". |
Classes de caractères
| Exemple | Description |
|---|---|
| [Pp]ython | Correspond à « Python » ou « python » |
| rub[ye] | Correspond à « ruby » ou « rube » |
| [aeiou] | Correspond à une lettre quelconque entre les crochets |
| [0-9] | Correspond à n'importe quel chiffre. Similaire à |
| [a-z] | Correspond à n'importe quelle lettre minuscule |
| [A-Z] | Correspond à n'importe quelle lettre majuscule |
| [a-zA-Z0-9] | Correspond à n'importe quelle lettre et chiffre |
| [^aeiou] | Tous les caractères sauf les lettres aeiou |
| [^0-9] | Correspond aux caractères autres que les chiffres |
Classes de caractères spéciaux
| Exemple | Description |
|---|---|
| . | Correspond à tout caractère unique sauf "\n". Pour correspondre à n'importe quel caractère, y compris '\n', utilisez un motif comme '[.\n]'. |
| \d | Correspond à un chiffre. Équivalent à [0-9]. |
| \D | Correspond à un caractère autre qu'un chiffre. Équivalent à [^0-9]. |
| \s | Correspond à tout caractère d'espacement, y compris l'espace, la tabulation, le saut de page, etc. Équivalent à [ \f\n\r\t\v]. |
| \S | Correspond à tout caractère qui n'est pas un caractère d'espacement. Équivalent à [^ \f\n\r\t\v]. |
| \w | Correspond à tout caractère de mot, y compris le trait de soulignement. Équivalent à '[A-Za-z0-9_]'. |
| \W | Correspond à tout caractère qui n'est pas un caractère de mot. Équivalent à '[^A-Za-z0-9_]'. |