Les expressions régulières sont des outils efficaces pour la correspondance de modèles et le traitement de texte. Une expression régulière, ou expression régulière, est un groupe de caractères qui forme un modèle de recherche.
Pour déterminer si une chaîne contient un modèle de recherche particulier, utilisez RegEx. Ils sont pris en charge par de nombreux langages de programmation, notamment Python, qui fournit un moteur d’expressions régulières puissant et flexible capable de gérer un large éventail de tâches de correspondance de texte. Cet article fournira un bref guide sur l’utilisation des expressions régulières en Python.
Que sont les expressions régulières ?
Les expressions régulières (RegEx) sont des combinaisons de caractères uniques qui utilisent un modèle de recherche pour localiser une chaîne ou un groupe de chaînes, telles que la recherche de toutes les adresses e-mail dans un document ou la validation du format d’un numéro de téléphone. Il peut faire la distinction entre la présence et l’absence d’un texte en le comparant à un modèle spécifique. Il peut également diviser un motif en un ou plusieurs sous-motifs.
L’utilisation de regex en Python est prise en charge via le re-module, qui est fourni par Python. Son objectif principal est de fournir une recherche; pour ce faire, une expression régulière et une chaîne sont nécessaires. Dans ce cas, il renvoie soit la première correspondance, soit aucune. Les expressions régulières sont utilisées pour faire correspondre des modèles dans le texte. Les expressions régulières sont souvent utilisées dans les éditeurs de texte, les utilitaires de ligne de commande et les langages de programmation.
Les expressions régulières se composent de deux types de caractères :
- Littéraux : ce sont des caractères qui se correspondent. Par exemple, la lettre « a » correspondra à la lettre « a » dans une chaîne de texte.
- Métacaractères : Ce sont des caractères spéciaux qui ont une signification particulière. Par exemple, le métacaractère point (.) correspond à n’importe quel caractère unique.
Utiliser des expressions régulières en Python
Python fournit un module intégré appelé « re » qui prend en charge les expressions régulières. Ce module fournit plusieurs fonctions pour travailler avec des expressions régulières, y compris la recherche de correspondances, le remplacement de correspondances et la division d’une chaîne en une liste de sous-chaînes basée sur un modèle.
Le module « re » fournit également plusieurs caractères spéciaux qui peuvent être utilisés pour créer des expressions régulières complexes. Voici quelques-uns des caractères spéciaux les plus couramment utilisés dans les expressions régulières :
Personnage |
Description |
. |
tout caractère unique, à l’exception de la nouvelle ligne (\n), est mis en correspondance. Par exemple, l’expression régulière pour il .. correspondra à « enfer », « aide », etc. |
* |
se compare à 0 ou plusieurs occurrences du caractère précédent. Par exemple, l’expression régulière a* correspondra à zéro ou plusieurs occurrences de la lettre « a ». |
+ |
correspond à une ou plusieurs occurrences du caractère précédent. Par exemple, l’expression régulière a+ correspondra à une ou plusieurs occurrences de la lettre « a ». |
? |
correspond à zéro ou à une instance du caractère précédent. Par exemple, l’expression régulière colo?r correspondra à la fois à « couleur » et à « couleur ». |
{m,n} |
Correspond au caractère précédent entre m et n fois. Par exemple, l’expression régulière a{2,3} correspondra à « aa » ou « aaa ». |
[] |
Correspond à n’importe quel caractère entre crochets. Par exemple, l’expression régulière [aeiou] correspondra à n’importe quel type de voyelle. |
\ |
Utilisé pour supprimer la signification spéciale du caractère qui le suit. Par exemple, l’expression régulière \. correspondra à un caractère point. |
^ |
La chaîne doit commencer par les caractères suivant ^. Par exemple, l’expression régulière ^bonjour correspondra uniquement si la phrase commence par bonjour. |
$ |
La chaîne doit se terminer par les caractères suivant $. Par exemple, l’expression régulière bonjour$ ne correspondra que si la phrase se termine par bonjour. |
| |
Soit ou. Par exemple, l’expression régulière suman|ritik Vérifiez si la chaîne contient « suman » ou « ritik » |
Discutons en détail de certains de ces métacaractères importants :
. – Point
À l’exception du caractère de saut de ligne (\n), le symbole point (.) ne reconnaît qu’un seul caractère. Par exemple:
- ab recherchera tout caractère autre qu’un point dans la chaîne, y compris acb, acbd, abbb, etc.
- .. déterminera si la chaîne comporte au moins deux caractères.
* – Étoile
Étoile
-
Le symbole correspond à zéro ou plusieurs instances de la regex qui précède le symbole étoile. Par exemple:
Comme b n’est pas suivi de c, ab*c sera mis en correspondance pour les chaînes ac, abc, abbbc, dabc, etc., mais pas pour abdc.
+ – Plus
- Une ou plusieurs instances de la regex qui précède le symbole + correspondent au symbole Plus (+). Par exemple :
Parce qu’il n’y a pas de b dans ac et que b n’est pas suivi de c dans abdc, ab+c correspondra pour la chaîne abc, abbc, dabc mais pas pour ac, abdc.
? – Question
- Le point d’interrogation (?) détermine si la chaîne de l’expression régulière apparaît au moins une fois ou pas du tout. Par exemple:
Comme il y a deux b dans la chaîne abbc, il n’y aura pas de correspondance. Cependant, ab?c sera mis en correspondance pour les chaînes ac, acb et dabc. Comme b n’est pas suivi de c, il ne correspondra pas non plus à abdc.
Bretelles {m, n}
- Toutes les répétitions de m à n, inclus, avant la regex correspondent aux accolades. Exemple-
Les chaînes aaab, baaac et gaad seront mises en correspondance pour l’expression régulière a{2, 4}, mais elles ne le seront pas pour les chaînes comme abc, bc car il n’y a qu’un an ou aucun dans les deux situations. []Crochets
.[]Une classe de caractères composée d’un groupe de caractères que l’on veut faire correspondre est représentée par des crochets ( [abc] ). La classe de personnage
correspondra, par exemple, à n’importe quel a, b ou c.
- Avec le symbole – entre crochets, nous pouvons également spécifier une plage de caractères. Par exemple: [0123] L’échantillon pour [0,3]est
- . [abc] L’échantillon pour [a-c]est
.
- [^0-3] Le signe caret(^) peut également être utilisé pour inverser la classe de caractères. Par exemple:
- [^a-c]désigne tout nombre autre que 0 et 1 ou 3.
Tout caractère qui n’est pas un a, un b ou un c.
\ Barre oblique inverse
Pour vous assurer que le caractère ne reçoit pas de traitement spécial, utilisez la barre oblique inverse (/). Cela pourrait être considéré comme une fuite de métacaractère. A titre d’illustration, le point (.) sera traité comme un caractère spécial et l’un des métacaractères si vous souhaitez le rechercher dans la chaîne (comme indiqué dans le tableau ci-dessus). Afin d’éviter qu’il ne perde sa spécialisation, nous utiliserons la barre oblique inverse (/) avant le point (.) dans ce cas. L’exemple ci-dessous vous aidera à comprendre.
import re
s="suman.singh"
# without using \
match = re.search(r'.', s)
print(match)
# using \
match = re.search(r'\.', s)
print(match)
Code:
<re.Match object; span=(0, 1), match="s">
<re.Match object; span=(6, 7), match=".">
» data-lang= »text/x-python »>
| – Ou Symbole
- Détermine si le motif avant ou après le symbole ou est présent dans la chaîne. Par exemple:
Toute chaîne contenant soit un soit un b, comme acd, bcd, abcd, etc., sera mise en correspondance par a|b.
Séquences spéciales
Les séquences spéciales fournissent la position précise dans la chaîne de recherche où la correspondance doit avoir lieu plutôt que la correspondance pour le caractère réel dans la chaîne. Cela simplifie l’écriture de modèles fréquemment utilisés.
Liste des séquences spéciales Séquence spéciale |
Description |
|
Exemples |
\UN |
correspond si le caractère spécifié apparaît au début de la chaîne. |
\Afor -> pour suman |
\b |
Correspond si le caractère fourni commence ou termine le mot. \b(chaîne) recherchera le début du mot et \b(chaîne) recherchera la fin du mot. |
\bsh -> suman |
\B |
Contrairement au \b, la chaîne ne doit pas commencer ni se terminer par le modèle spécifié. |
\Bge -> ensemble |
\d [0-9] Ceci est similaire à la classe set |
car il correspond à n’importe quel chiffre décimal. |
\d -> 1526 |
\D [0-9]correspond à tout caractère qui n’est pas un chiffre ; c’est la même chose que la classe set |
. |
\D -> suman |
\s |
chaque caractère d’espacement est une correspondance. |
\s -> sommer un |
\S |
tout caractère autre qu’un espace est une correspondance. |
\S -> s homme |
\w [a-zA-Z0-9_] C’est comparable à la classe |
et correspond à n’importe quel caractère alphanumérique. |
\w -> 3425 |
\W |
tout caractère non alphanumérique correspond. |
\W -> >$ |
\Z |
correspond si la chaîne contient l’expression régulière spécifiée à la fin. |
an\Z -> suman
Opérations de base sur les expressions régulières
1. Recherche de correspondances
L’opération la plus basique dans les expressions régulières est la recherche d’une correspondance dans une chaîne. Le module « re » fournit la fonction « recherche » à cet effet. Voici un exemple d’utilisation de la fonction « search » pour trouver un motif dans une chaîne :
import re
text = "Suman Raghav and Ron are friends"
pattern = "friends"
result = re.search(pattern, text)
if result:
print("String Pattern Found")
else:
print("String Pattern not Found")
Code:
Ce code affichera « String Pattern Found » car le motif « friends » est trouvé dans le texte.
2. Remplacement des allumettes
Une autre opération courante dans les expressions régulières consiste à remplacer les correspondances dans une chaîne. Le module « re » fournit la fonction « sub » à cet effet. Voici un exemple d’utilisation de la fonction « sub » pour remplacer un motif dans une chaîne :
import re
text = "Suman Raghav and Ron are friends"
pattern = "friends"
replacement = "students"
result = re.sub(pattern, replacement, text)
print(result)
Code:
Ce code affichera « Suman Raghav et Ron sont étudiants » car le modèle « amis » est remplacé par « étudiants » dans le texte d’origine.
3. Fractionner une chaîne en fonction d’un modèle
Le module « re » peut également être utilisé pour diviser une chaîne en une liste de…