Guide du débutant sur les expressions régulières avec Python
Si vous êtes un programmeur, il y a de fortes chances que vous sachiez déjà ce que sont les expressions régulières (regex). Les modèles Regex ont été implémentés dans presque tous les langages de programmation traditionnels, mais la puissance et la polyvalence de ces modèles ne sont toujours pas reconnues par la plupart des développeurs.
Ce guide traite des expressions régulières et de la façon dont vous pouvez les utiliser dans le langage de programmation Python.
Que sont les expressions régulières?
Les expressions régulières sont des modèles qui aident un utilisateur à faire correspondre les combinaisons de caractères dans les fichiers texte et les chaînes. Vous pouvez utiliser des expressions régulières pour filtrer ou rechercher un modèle spécifique dans la sortie d'une commande ou d'un document.
Il existe différents cas d'utilisation d'expressions régulières, le plus connu étant la commande grep sous Linux . D'autres applications incluent le filtrage des informations, comme l'extraction d'adresses e-mail et de numéros de téléphone à partir d'un vidage de données.
La principale raison pour laquelle de nombreux développeurs s'éloignent des expressions régulières est le manque de conscience de la puissance de la correspondance de modèles. Certains trouvent même les expressions régulières déroutantes en raison de la grande quantité de caractères et de séquences utilisées dans les modèles.
Quelle qu'en soit la raison, les expressions régulières sont et seront l'un des aspects les plus importants de la programmation que tout le monde devrait connaître.
Expressions régulières: correspondance des caractères et des séquences
Regex est un tout nouveau langage en soi. Un moteur d'expression régulière interprète des modèles composés de plusieurs caractères dotés de significations spécifiques. Les littéraux de base tels que les caractères alphanumériques se correspondent. Mais les caractères complexes tels que $, *, +, {, etc. facilitent la correspondance d'ordre supérieur.
- Astérisque (*): correspond zéro ou plusieurs fois au caractère précédent. La signification littérale du caractère serait "Élément multiplié n fois". Par exemple, si l'expression régulière est abc * , les chaînes correspondantes seront ab, abc, abcc, abccc, abcccc, etc. L'expression [bc] * correspondra à bc, bcbc, bcbc, etc.
- Plus (+): correspond au caractère précédent une ou plusieurs fois. Le fonctionnement du caractère + est similaire à * , mais le caractère + omet le modèle si le caractère ne se produit pas. Par exemple, abc + correspondra à abc, abcc, abccc, etc. mais pas ab.
- Point d'interrogation (?): Correspond à zéro ou une ou plusieurs fois le caractère précédent. Par exemple, le modèle abc? correspondra uniquement à ab et abc.
- Pipe (|): Utilisé comme opérateur OR binaire. Correspond à l'un des caractères précédant et suivant le tube. Par exemple, a | b correspondra à a ou b.
- Point (.): Correspond à un personnage dont l'identité est inconnue. Par exemple, ac correspondra à aac, abc, acc, a2c, etc.
- Carotte (^): correspond au premier caractère du motif. Par exemple, ^ Ra correspondra à des mots commençant par Ra tels que Lapin, Raton laveur et Aléatoire.
- Dollar ($): correspond au dernier caractère du modèle. Par exemple, un $ correspondra à des mots se terminant par un tel que Van, Dan et Plan.
- Trait d'union (-): Utilisé pour définir une plage de caractères. Par exemple, [0-9] correspondra à tous les caractères numériques à un seul chiffre.
Les séquences spéciales utilisées dans les modèles d'expression régulière sont:
- A: renvoie une correspondance si les caractères suivants sont présents au début de la chaîne. Par exemple, AThe correspondra à des mots commençant par The tels que The, Them, They, etc.
- b: renvoie une correspondance si le caractère est trouvé au début ou à la fin d'un mot. Par exemple, bmad et mad b correspondront respectivement à des mots tels que made et nomad .
- B: renvoie une correspondance si le caractère n'est pas trouvé au début ou à la fin d'un mot.
- d: correspond aux caractères numériques présents dans la chaîne. Par exemple, / d * correspondra à des nombres tels que 1, 12, 1232, etc.
- D: correspond aux caractères non numériques de la chaîne. / D correspondra à a, b, c, f, etc.
- s: correspond à un caractère d'espacement dans le texte.
- S: correspond à un caractère non blanc dans le texte.
- w: renvoie une correspondance si la chaîne contient des caractères alphanumériques, y compris des traits de soulignement. Par exemple, w correspondra à a, b, c, d, 1, 2, 3, etc.
- W: renvoie une correspondance si la chaîne ne contient pas de caractères alphanumériques ou de traits de soulignement.
- Z: correspond aux caractères à la fin d'une chaîne. Par exemple, end Z correspondra à des mots se terminant par une fin tels que plier, réparer, tendre, etc.
Méthodes Python pour les expressions régulières
En Python, la bibliothèque re fournit toutes les fonctions et utilitaires nécessaires pour implémenter regex dans vos programmes. Vous n'avez pas besoin de télécharger la bibliothèque à l'aide de pip car elle est préinstallée avec l'interpréteur Python.
Pour importer la bibliothèque re en Python, ajoutez le code suivant à votre script:
import re
Notez qu'en passant des expressions régulières en Python, nous utilisons des chaînes brutes car elles n'interprètent pas les caractères spéciaux tels que n et t différemment.
Correspondre()
La méthode re.match () en Python renvoie un objet regex si le programme trouve une correspondance au début de la chaîne spécifiée. Cette fonction prend deux arguments de base:
re.match(pattern, string)
… où pattern est l'expression régulière et string est le texte qui doit être recherché.
Jetez un œil à l'extrait de code ci-dessous.
import re
match = re.match(r'Word', "This sentence contains a Word")
print(match)
Le caractère r avant la chaîne représente la chaîne brute.
Production:
None
Le code susmentionné renvoie None car Word n'était pas présent au début de la chaîne.
Si une correspondance est trouvée, vous pouvez imprimer la correspondance à l'aide de la méthode group () qui appartient à l'objet regex.
import re
match = re.match(r'Word', "Word is hard to read")
print(match.group(0))
Production:
Word
Rechercher()
La méthode re.search () prend des arguments similaires à re.match (). Alors que match () ne renvoie que les correspondances présentes au début de la chaîne, search () renverra les correspondances trouvées à n'importe quel index de la chaîne.
import re
match = re.search(r'Word', "This sentence contains a Word. Word is hard to read.")
print(match.group(0))
Notez que les méthodes match () et search () ne renverront qu'une seule correspondance de modèle. Dans le code mentionné ci-dessus, Word apparaît deux fois. Mais la fonction search () ne correspondra qu'à la première occurrence du mot.
Word
Trouver tout()
Comme vous pouvez déjà le deviner, la méthode findall () renvoie toutes les correspondances possibles dans la chaîne.
import re
match = re.search(r'Word', "This sentence contains a Word. Word is hard to read.")
for elem in match:
print(elem)
Au lieu de renvoyer un objet regex, la fonction findall () renvoie une liste de toutes les correspondances. Vous pouvez parcourir la liste en utilisant une boucle for en python .
Diviser()
Si vous souhaitez diviser une chaîne en sous-chaînes en utilisant un modèle comme délimiteur, la fonction split () est celle dont vous avez besoin.
import re
split = re.split(r'and', "This word and that and this are different.")
print(split)
Production:
['This word", "that", "this are different."]
Sous()
La méthode sub () permet à un utilisateur de substituer un mot spécifique à la place d'un motif. Il prend les arguments suivants.
re.sub(pattern, replacement, string)
Considérez cet extrait de code:
import re
result = re.sub(r'and', 'or', "Dave and Harry must be punished.")
print(result)
Production:
Dave or Harry must be punished.
Compiler()
La méthode re.compile () dans la bibliothèque re permet à un utilisateur de stocker une version compilée du modèle d'expression régulière dans la mémoire. Ensuite, à l'aide de l'objet compilé, l'utilisateur peut filtrer rapidement le vidage de texte spécifié pour les modèles correspondants.
import re
pattern = re.compile('Python')
match = pattern.findall("Python is a great language for writing scripts. Python is easy to learn.")
print(match)
Cette fonction est principalement utilisée pour enregistrer des modèles qui nécessitent beaucoup de ressources et qui nécessitent beaucoup de temps pour s'exécuter. La compilation et l'enregistrement préalable du modèle en tant qu'objet résout ce problème.
Tirez parti de la puissance de Regex avec Python
Lorsque vous travaillez avec des fichiers texte et des sorties, regex est un excellent outil à votre disposition. Vous pouvez rapidement écrire du code pour filtrer ou remplacer des modèles spécifiques dans le document.
La mémorisation de tous les caractères et des séquences correspondantes peut être difficile si vous débutez tout juste avec l'expression régulière. Pour vous améliorer dans les expressions régulières, faire référence à une liste de caractères, de méthodes et de séquences de temps en temps vous aidera certainement à long terme.