Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

Expressions régulières Python (module re) — Guide pratique

Expressions régulières Python (module re) — Guide pratique

Découvrez comment exploiter la puissance des expressions régulières en Python avec le module re. Exemples pas à pas illustrant motifs courants, techniques de correspondance et fonctions avancées.

Qu'est-ce qu'une expression régulière ?

Une expression régulière (RegEx) est une séquence de caractères qui définit un motif de recherche. Par exemple, le motif ^a...s$ correspond à toute chaîne de cinq lettres qui commence par a et se termine par s.

^a...s$

Les motifs peuvent être utilisés pour correspondre à des chaînes. Le tableau suivant montre comment le motif se comporte avec différentes entrées :

ExpressionChaîneCorrespondance ?
^a...s$absPas de correspondance
aliasCorrespondance
abyssCorrespondance
AliasPas de correspondance
Un abaquePas de correspondance

Le module re de Python fournit les outils nécessaires pour travailler avec les RegEx. Voici un exemple rapide qui utilise re.match() pour vérifier un motif contre une chaîne :

import re
motif = '^a...s$'
chaine_test = 'abyss'
resultat = re.match(motif, chaine_test)
if resultat:
    print("Recherche réussie.")
else:
    print("Recherche infructueuse.")

Quand le motif est trouvé, re.match() retourne un objet de correspondance ; sinon, il retourne None.


Spécifier des motifs avec des métacaractères

Les métacaractères sont des symboles spéciaux que le moteur regex interprète de manière unique. Voici une référence rapide pour les métacaractères les plus courants :

[] . ^ $ * + ? {} () \ |


Crochets : []

Les crochets définissent un ensemble de caractères à correspondre. Par exemple, [abc] correspond à toute occurrence unique de a, b ou c.

ExpressionChaîneCorrespondance ?
[abc]a1 correspondance
ac2 correspondances
Hey JudePas de correspondance
abc de ca5 correspondances

Les plages peuvent être exprimées avec un tiret, ex. : [a-e] équivaut à [abcde]. Pour inverser un ensemble, placez un accent circonflexe ^ après le crochet ouvrant, ex. : [^abc] correspond à tout caractère sauf a, b ou c.


Point : .

Le point correspond à tout caractère unique sauf une nouvelle ligne.

ExpressionChaîneCorrespondance ?
..aPas de correspondance
ac1 correspondance
acd1 correspondance
acde2 correspondances (contient 4 caractères)

Accent circonflexe : ^ et Dollar : $

L'accent circonflexe affirme le début d'une chaîne ; le signe dollar affirme la fin. Par exemple, ^a correspond à toute chaîne commençant par a, tandis que a$ correspond à toute chaîne se terminant par a.

ExpressionChaîneCorrespondance ?
^aa1 correspondance
abc1 correspondance
bacPas de correspondance
^ababc1 correspondance
acbPas de correspondance (commence par a mais pas suivi de b)
ExpressionChaîneCorrespondance ?
a$a1 correspondance
formule1 correspondance
cabPas de correspondance

Quantificateurs : *, +, ?, {n,m}

Ces symboles contrôlent combien de fois l'élément précédent doit apparaître.

Exemples :

ExpressionChaîneCorrespondance ?
ma*nmn1 correspondance
man1 correspondance
maaan1 correspondance
mainPas de correspondance (a n'est pas suivi de n)
femme1 correspondance
ExpressionChaîneCorrespondance ?
ma+nmnPas de correspondance (pas de a)
man1 correspondance
maaan1 correspondance
mainPas de correspondance (a n'est pas suivi de n)
femme1 correspondance
ExpressionChaîneCorrespondance ?
ma?nmn1 correspondance
man1 correspondance
maaanPas de correspondance (plus d'un a)
mainPas de correspondance (a n'est pas suivi de n)
femme1 correspondance
ExpressionChaîneCorrespondance ?
a{2,3}abc datPas de correspondance
abc daat1 correspondance (à daat)
aabc daaat2 correspondances (à aabc et daaat)
aabc daaaat2 correspondances (à aabc et daaaat)

Motif couramment utilisé : [0-9]{2,4} correspond à deux à quatre chiffres consécutifs.

ExpressionChaîneCorrespondance ?
[0-9]{2,4}ab123csde1 correspondance (à ab123csde)
12 et 3456733 correspondances (12, 3456, 73)
1 et 2Pas de correspondance

Alternation : |

La barre verticale implémente le OU logique. Par exemple, a|b correspond à toute chaîne contenant a ou b.

ExpressionChaîneCorrespondance ?
a|bcdePas de correspondance
ade1 correspondance (à ade)
acdbea3 correspondances (à acdbea)

Groupement : ()

Les parenthèses groupent des sous-motifs et capturent les sous-chaînes correspondantes. Exemple : (a|b|c)xz correspond à toute chaîne qui contient a, b ou c suivi de xz.

ExpressionChaîneCorrespondance ?
(a|b|c)xzab xzPas de correspondance
abxz1 correspondance (à abxz)
axz cabxz2 correspondances (à axzbc cabxz)

Échappement : \

Utilisez une barre oblique inverse pour traiter un métacaractère comme littéral. Par exemple, \$a correspond à la séquence littérale $a au lieu d'interpréter $ comme l'ancre de fin de chaîne.


Séquences spéciales

Les séquences spéciales simplifient les motifs courants. Voici une liste de référence avec exemples illustratifs.

Début de chaîne : \A

ExpressionChaîneCorrespondance ?
\Athethe sunCorrespondance
In the sunPas de correspondance

Frontière de mot : \b

ExpressionChaîneCorrespondance ?
\bfoofootballCorrespondance
a footballCorrespondance
afootballPas de correspondance
foo\bthe fooCorrespondance
the afoo testCorrespondance
the afootestPas de correspondance

Non-frontière de mot : \B

ExpressionChaîneCorrespondance ?
\BfoofootballPas de correspondance
a footballPas de correspondance
afootballCorrespondance
foo\Bthe fooPas de correspondance
the afoo testPas de correspondance
the afootestCorrespondance

Chiffre : \d / Non-chiffre : \D

ExpressionChaîneCorrespondance ?
\d12abc33 correspondances (à 12abc3)
PythonPas de correspondance
\D1ab34"503 correspondances (à 1ab34"50)
1345Pas de correspondance

Espace blanc : \s / Non-espace blanc : \S

ExpressionChaîneCorrespondance ?
\sPython RegEx1 correspondance
PythonRegExPas de correspondance
\Sa b2 correspondances (à a b)
Pas de correspondance

Caractère de mot : \w / Non-mot : \W

ExpressionChaîneCorrespondance ?
\w12&": ;c 3 correspondances (à 12": ;c)
"%> !Pas de correspondance
\W1a2%c1 correspondance (à 1a2%c)
PythonPas de correspondance

Fin de chaîne : \Z

ExpressionChaîneCorrespondance ?
Python\ZI like Python1 correspondance
I like Python ProgrammingPas de correspondance
Python is fun.Pas de correspondance

Astuce : Utilisez un testeur regex en ligne comme regex101 pour créer et déboguer des motifs rapidement.


Utiliser RegEx en Python

Le module re de Python offre un ensemble riche de fonctions et constantes pour les opérations regex. Importez-le avec :

import re

Voici les utilitaires les plus courants et comment les utiliser.


re.findall()

Retourne une liste de toutes les correspondances non chevauchantes dans une chaîne.

# Extraire tous les nombres d'une chaîne
import re
chaine = 'bonjour 12 salut 89. Comment 34'
motif = '\d+'
resultat = re.findall(motif, chaine)
print(resultat)  # Sortie : ['12', '89', '34']

Quand aucune correspondance n'est trouvée, une liste vide est retournée.


re.split()

Divise une chaîne à chaque point où le motif correspond, retournant une liste de sous-chaînes.

import re
chaine = 'Douze:12 Quatre-vingt-neuf:89.'
motif = '\d+'
resultat = re.split(motif, chaine)
print(resultat)  # Sortie : ['Douze:', ' Quatre-vingt-neuf:', '.']

Utilisez l'argument optionnel maxsplit pour limiter le nombre de divisions. Une valeur de 0 (défaut) divise à chaque correspondance.

import re
chaine = 'Douze:12 Quatre-vingt-neuf:89 Neuf:9.'
motif = '\d+'
# Diviser seulement à la première occurrence
resultat = re.split(motif, chaine, 1)
print(resultat)  # Sortie : ['Douze:', ' Quatre-vingt-neuf:89 Neuf:9.']

re.sub()

Remplace toutes les occurrences d'un motif par une chaîne de remplacement.

# Supprimer tous les caractères d'espace blanc
import re
chaine = 'abc 12\nde 23 \n f45 6'
motif = '\s+'
remplacement = ''
nouvelle_chaine = re.sub(motif, remplacement, chaine)
print(nouvelle_chaine)  # Sortie : abc12de23f456

Pour limiter les remplacements, fournissez un argument count. Une valeur de 0 remplace chaque correspondance.

nouvelle_chaine = re.sub(r'\s+', remplacement, chaine, 1)
print(nouvelle_chaine)  # Sortie : abc12de 23 f45 6

re.subn()

Comme re.sub(), mais retourne un tuple contenant la nouvelle chaîne et le nombre de substitutions effectuées.

nouvelle_chaine = re.subn(motif, remplacement, chaine)
print(nouvelle_chaine)  # Sortie : ('abc12de23f456', 4)

re.search()

Trouve le premier emplacement où le motif correspond.

chaine = "Python est amusant"
correspondance = re.search('\\APython', chaine)
if correspondance:
    print("motif trouvé dans la chaîne")
else:
    print("motif non trouvé")
# Sortie : motif trouvé dans la chaîne

Objet de correspondance (Match Object)

Quand une correspondance est trouvée, re.search() retourne un objet Match. Méthodes et attributs courants incluent :

chaine = '39801 356, 2102 1111'
motif = '(\d{3}) (\d{2})'
correspondance = re.search(motif, chaine)
if correspondance:
    print(correspondance.group())
    print(correspondance.group(1))
    print(correspondance.group(2))
    print(correspondance.groups())
    print(correspondance.start(), correspondance.end(), correspondance.span())
else:
    print("motif non trouvé")
# Sortie :
# 801 35
# 801
# 35
# ('801', '35')
# 2 8 (2, 8)

Utiliser des chaînes brutes (préfixe r)

Préfixer un littéral de chaîne avec r traite les barres obliques inverses comme caractères littéraux, prévenant les séquences d'échappement accidentelles. C'est particulièrement utile dans les motifs regex.

chaine = '\n et \r sont des séquences d\'échappement.'
resultat = re.findall(r'[\n\r]', chaine)
print(resultat)  # Sortie : ['\n', '\r']

Pour une exploration plus approfondie du module re, référez-vous à la documentation officielle Python.

Python

  1. Mots-clés et identifiants Python : Maîtriser les mots réservés et les conventions de nommage
  2. Maîtriser les types de données Python : Guide pratique
  3. Maîtriser les opérateurs Python : Guide complet
  4. Maîtriser les arguments de fonctions Python : Positionnels, nommés et paramètres par défaut
  5. Maîtriser les dictionnaires Python : création, manipulation et techniques avancées
  6. Maîtriser les itérateurs Python : fonctionnement et création des vôtres
  7. Les fermetures Python expliquées : comment les fonctions imbriquées capturent les variables
  8. Maîtriser Python datetime : guide pratique pour les dates, heures et fuseaux horaires
  9. Maîtriser le module time de Python : Fonctions, structures et exemples pratiques