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

Maîtriser les expressions régulières en Python : Guide pratique

Une expression régulière est une séquence spéciale de caractères qui aide à faire correspondre ou trouver d'autres chaînes ou ensembles de chaînes, en utilisant une syntaxe spécialisée dans un motif. 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 style Perl en Python. Le module re lève l'exception re.error si une erreur survient lors de la compilation ou de l'utilisation d'une expression régulière.

Nous couvrirons deux fonctions importantes pour gérer les expressions régulières. Mais d'abord : divers caractères ont une signification spéciale dans les expressions régulières. Pour éviter toute confusion, nous utiliserons des chaînes brutes (raw strings) comme r'expression'.

La fonction match

Cette fonction tente de faire correspondre le motif RE à la chaîne avec des drapeaux optionnels.

Syntaxe :

re.match(pattern, string, flags=0)

Description des paramètres :

N°Paramètre et description
1

pattern

Expression régulière à faire correspondre.

2

string

Chaîne dans laquelle rechercher le motif au début de la chaîne.

3

flags

Drapeaux spécifiés via OR bit à bit (|). Modificateurs listés dans le tableau ci-dessous.

re.match renvoie un objet match en cas de succès, None en cas d'échec. On utilise group(num) ou groups() de l'objet match pour obtenir l'expression correspondante.

N°Méthode de l'objet Match et description
1

group(num=0)

Renvoie la correspondance complète (ou le sous-groupe spécifique num)

2

groups()

Renvoie tous les sous-groupes correspondants dans un tuple (vide s'il n'y en a 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!!")

Résultat :

matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter

La fonction search

Cette fonction recherche la première occurrence du motif RE dans la chaîne avec des drapeaux optionnels.

Syntaxe :

re.search(pattern, string, flags=0)

Paramètres :

N°Paramètre et description
1

pattern

Expression régulière à faire correspondre.

2

string

Chaîne dans laquelle rechercher le motif n'importe où dans la chaîne.

3

flags

Drapeaux via OR bit à bit (|). Modificateurs listés ci-dessous.

re.search renvoie un objet match en cas de succès, None en cas d'échec. On utilise group(num) ou groups().

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!!")

Résultat :

searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter

Correspondance vs Recherche

Python offre deux opérations primitives basées sur les expressions régulières : match vérifie une correspondance seulement au début de la chaîne, tandis que search vérifie une correspondance n'importe où dans la chaîne (comportement par défaut de Perl).

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!!")

Résultat :

No match!!
search --> searchObj.group() : dogs

Recherche et remplacement

L'une des méthodes re les plus importantes utilisant les expressions régulières est sub.

Syntaxe

re.sub(pattern, repl, string, max=0)

Cette méthode remplace toutes les occurrences du motif RE pattern dans string par repl, sauf si max est fourni. Renvoie la chaîne modifiée.

Exemple

#!/usr/bin/python
import re
phone = "2004-959-559 # This is Phone Number"
# Supprimer les commentaires style Python
num = re.sub(r'#.*$', "", phone)
print("Phone Num : ", num)
# Supprimer tout sauf les chiffres
num = re.sub(r'\D', "", phone)
print("Phone Num : ", num)

Résultat :

Phone Num : 2004-959-559
Phone Num : 2004959559

Modificateurs d'expressions régulières : Drapeaux d'option

Les littéraux d'expression régulière peuvent inclure un modificateur optionnel pour contrôler divers aspects de la correspondance. Les modificateurs sont spécifiés comme drapeau optionnel. Vous pouvez fournir plusieurs modificateurs avec OR exclusif (|).

N°Modificateur et description
1

re.I

Correspondance insensible à la casse.

2

re.L

Interprète les mots selon la locale courante. Affecte \w, \W, \b, \B.

3

re.M

Fait correspondre $ à la fin d'une ligne (pas seulement fin de chaîne) et ^ au début de toute ligne.

4

re.S

Fait correspondre le point (.) à tout caractère, y compris le saut de ligne.

5

re.U

Interprète les lettres selon l'ensemble de caractères Unicode. Affecte \w, \W, \b, \B.

6

re.X

Permet une syntaxe "plus jolie". Ignore les espaces (sauf dans [] ou échappés) et traite # non échappé comme marqueur de commentaire.

Motifs d'expressions régulières

Excepté les caractères de contrôle (+ ? . * ^ $ ( ) [ ] { } | \), tous les caractères se correspondent eux-mêmes. Échappez un caractère de contrôle en le préfixant d'un antislash.

Tableau de la syntaxe disponible en Python :

N°Motif et description
1

^

Début de ligne.

2

$

Fin de ligne.

3

.

Tout caractère unique sauf saut de ligne. Option m permet de correspondre au saut de ligne.

4

[...]

Tout caractère unique dans les crochets.

5

[^...]

Tout caractère unique pas dans les crochets.

6

re*

0 ou plusieurs occurrences de l'expression précédente.

7

re+

1 ou plusieurs occurrences de l'expression précédente.

8

re?

0 ou 1 occurrence de l'expression précédente.

9

re{n}

Exactement n occurrences de l'expression précédente.

10

re{n,}

n ou plus occurrences de l'expression précédente.

11

re{n,m}

Au moins n et au plus m occurrences de l'expression précédente.

12

a|b

Correspond à a ou b.

13

(re)

Groupe les expressions régulières et mémorise le texte correspondant.

14

(?imx)

Active temporairement i, m, ou x dans une regex. Si entre parenthèses, seule cette zone est affectée.

15

(?-imx)

Désactive temporairement i, m, ou x. Si entre parenthèses, seule cette zone.

16

(?:re)

Groupe sans mémoriser le texte correspondant.

17

(?imx:re)

Active temporairement i, m, ou x entre parenthèses.

18

(?-imx:re)

Désactive temporairement i, m, ou x entre parenthèses.

19

(?#...)

Commentaire.

20

(?=re)

Spécifie une position via un motif. Pas d'étendue.

21

(?!re)

Spécifie une position via la négation d'un motif. Pas d'étendue.

22

(?>re)

Correspond à un motif indépendant sans backtracking.

23

\w

Caractères de mot.

24

\W

Non-caractères de mot.

25

\s

Espace blanc. Équivalent à [\t\n\r\f].

26

\S

Non-espace blanc.

27

\d

Chiffres. Équivalent à [0-9].

28

\D

Non-chiffres.

29

\A

Début de chaîne.

30

\Z

Fin de chaîne. Si saut de ligne existe, correspond juste avant.

31

\z

Fin de chaîne.

32

\G

Point où la dernière correspondance s'est terminée.

33

\b

Frontières de mot hors crochets. Retour arrière (0x08) dans crochets.

34

\B

Non-frontières de mot.

35

\n, \t, etc.

Sauts de ligne, retours chariot, tabulations, etc.

36

\1...\9

N-ième sous-expression groupée.

37

\10

N-ième sous-expression groupée si déjà correspondue. Sinon représentation octale.

Exemples d'expressions régulières

Caractères littéraux

N°Exemple et description
1

python

Correspond à "python".

Classes de caractères

N°Exemple et description
1

[Pp]ython

Correspond à "Python" ou "python"

2

rub[ye]

Correspond à "ruby" ou "rube"

3

[aeiou]

Correspond à une voyelle minuscule

4

[0-9]

Correspond à un chiffre ; identique à [0123456789]

5

[a-z]

Correspond à une lettre ASCII minuscule

6

[A-Z]

Correspond à une lettre ASCII majuscule

7

[a-zA-Z0-9]

Correspond à l'un des précédents

8

[^aeiou]

Correspond à tout sauf voyelle minuscule

9

[^0-9]

Correspond à tout sauf chiffre

Classes de caractères spéciales

N°Exemple et description
1

.

Tout caractère sauf saut de ligne

2

\d

Chiffre : [0-9]

3

\D

Non-chiffre : [^0-9]

4

\s

Espace blanc : [ \t\r\n\f]

5

\S

Non-espace blanc : [^ \t\r\n\f]

6

\w

Caractère de mot unique : [A-Za-z0-9_]

7

\W

Non-caractère de mot : [^A-Za-z0-9_]

Cas de répétition

N°Exemple et description
1

ruby?

"rub" ou "ruby" : le y est optionnel

2

ruby*

"rub" plus 0 ou plusieurs y

3

ruby+

"rub" plus 1 ou plusieurs y

4

\d{3}

Exactement 3 chiffres

5

\d{3,}

3 ou plus chiffres

6

\d{3,5}

3, 4 ou 5 chiffres

Répétition non-gourmande

Correspond au plus petit nombre de répétitions :

N°Exemple et description
1

<.*>

Gourmand : correspond à "<python>perl>"

2

<.*?>

Non-gourmand : correspond à "<python>" dans "<python>perl>"

Groupement avec parenthèses

N°Exemple et description
1

\D\d+

Pas de groupe : + répète \d

2

(\D\d)+

Groupé : + répète le couple \D\d

3

([Pp]ython(, )?)+

Correspond à "Python", "Python, python, python", etc.

Références arrière

Correspond à un groupe précédemment correspondu :

N°Exemple et description
1

([Pp])ython\&\1ails

Correspond à python&pails ou Python&Pails

2

(['"])[^\1]*\1

Chaîne entre guillemets simples ou doubles. \1 correspond au 1er groupe. \2 au 2e, etc.

Alternatives

N°Exemple et description
1

python|perl

Correspond à "python" ou "perl"

2

rub(y|le)

Correspond à "ruby" ou "ruble"

3

Python(!+|\?)

"Python" suivi d'un ou plusieurs ! ou un ?

Ancres

Nécessitent de spécifier la position de correspondance.

N°Exemple et description
1

^Python

"Python" au début d'une chaîne ou ligne interne

2

Python$

"Python" à la fin d'une chaîne ou ligne

3

\APython

"Python" au début d'une chaîne

4

Python\Z

"Python" à la fin d'une chaîne

5

\bPython\b

"Python" à une frontière de mot

6

\brub\B

\B non-frontière : "rub" dans "rube" et "ruby" mais pas seul

7

Python(?=!)

"Python" si suivi d'un point d'exclamation.

8

Python(?!\!)

"Python" si non suivi d'un point d'exclamation.

Syntaxe spéciale avec parenthèses

N°Exemple et description
1

R(?#comment)

Correspond à "R". Le reste est commentaire

2

R(?i)uby

Insensible à la casse pour "uby"

3

R(?i:uby)

Identique au-dessus

4

rub(?:y|le)

Groupe sans créer référence arrière \1

Python

  1. Maîtriser les types de données Python : Guide pratique
  2. Maîtriser les opérateurs Python : Guide complet
  3. Maîtriser l'instruction pass en Python : Guide pratique
  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. Expressions régulières Python (module re) — Guide pratique
  9. Maîtriser Python datetime : guide pratique pour les dates, heures et fuseaux horaires