Vous êtes peut-être habitué à rechercher du texte en appuyant sur ctrl-F et en tapant les mots que vous recherchez. Les expressions régulières vont encore plus loin : elles vous permettent de spécifier un modèle de texte à rechercher. Dans cet article, nous verrons comment la correspondance de modèles en Python fonctionne avec Regex.
Regex en Python
Expressions régulières , aussi appelé expression régulière , sont des descriptions d'un modèle de texte. Il peut détecter la présence ou l'absence d'un texte en le faisant correspondre à un motif particulier et peut également diviser un motif en un ou plusieurs sous-motifs. Par exemple, un d dans une expression régulière représente un caractère numérique, c'est-à-dire n'importe quel chiffre compris entre 0 et 9.
Vérifier les numéros de téléphone à l'aide de Regex en Python
L'expression régulière suivante est utilisée dans Python pour faire correspondre une chaîne de trois nombres, un trait d'union, trois autres nombres, un autre trait d'union et quatre nombres.
Any other string would not match the pattern. ddd-ddd-dddd>
Les expressions régulières peuvent être beaucoup plus sophistiquées. Par exemple, ajouter un 3 entre accolades ({3}) après un motif équivaut à dire : Faites correspondre ce motif trois fois. La regex légèrement plus courte est donc la suivante :
bharti jha
d{3}-d{3}-d{4}> Il correspond au format correct du numéro de téléphone.
Correspondance de modèles avec des expressions régulières
Un objet Regex recherche() La méthode recherche dans la chaîne à laquelle elle est transmise toutes les correspondances avec l'expression régulière. Les objets Match ont une méthode group() qui renverra le texte correspondant à la chaîne recherchée. Vous pouvez également voirFeuille de calcul Regexpour plus d'informations.
Exemple: Importez le module regex avec import re. Créez un objet Regex avec lere.compile()fonction. (N'oubliez pas d'utiliser une chaîne brute.) Transmettez la chaîne que vous souhaitez rechercher dans la méthode search() de l'objet Regex. Cela renvoie un objet Match. Appelez la méthode group() de l’objet Match pour renvoyer une chaîne du texte correspondant réellement.
Python3
# Python program to illustrate> # Matching regex objects> import> re> > # regex object> phoneNumRegex>=> re.>compile>(r>'ddd-ddd-dddd'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(>'Phone number found: '> +> mo.group())> |
>
>
Sortir:
Phone number found: 415-555-4242>
Parenthèses pour le regroupement et la capture avec Regex
L'un des moyens de faire correspondre des modèles avec Regex consiste à utiliser des parenthèses autour des modèles. Voyons quelques exemples différents pour une meilleure compréhension.
Objets correspondants
Supposons que vous souhaitiez séparer l'indicatif régional du reste du numéro de téléphone. L'ajout de parenthèses créera des groupes dans l'expression régulière : (ddd)-(ddd-dddd). Ensuite, vous pouvez utiliser la méthode d'objet de correspondance group() pour récupérer le texte correspondant d'un seul groupe.
Python3
import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.group(>1>))> areaCode, number>=> mo.groups()> print>(>'area code:'>, areaCode)> print>(>'number:'>, number)> |
>
>
Sortir:
415 area code: 415 number: 555-4242>
Récupérer tous les groupes à la fois
Si vous souhaitez récupérer tous les groupes en même temps, utilisez la méthode groups() – notez la forme plurielle du nom.
Python3
import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.groups())> |
>
>
Sortir:
('415', '555-4242')> Faire correspondre une parenthèse
Les parenthèses ont une signification particulière dans les expressions régulières, mais que faire si vous devez faire correspondre une parenthèse dans votre texte ? Par exemple, peut-être que les numéros de téléphone que vous essayez de faire correspondre ont l'indicatif régional défini entre parenthèses. Dans ce cas, vous devez échapper les caractères ( et ) avec une barre oblique inverse. Entrez ce qui suit dans le shell interactif :
Python3
convertir un caractère en chaîne
import> re> phoneNumRegex>=> re.>compile>(r>'((ddd)) (ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My phone number is (415) 555-4242.'>)> print>(mo.group(>1>))> |
>
>
Sortir:
(415)>
Les caractères d'échappement ( et ) dans la chaîne brute transmise à re.compile() correspondront aux caractères de parenthèse réels.
Expressions régulières : regroupement et caractère pipe
Le | Le personnage s'appelle une pipe. Nous pouvons l'utiliser partout où nous voulons faire correspondre l'une des nombreuses expressions.
Exemple: L’expression régulière r’Batman|Tina Fey’ correspondra soit à ‘Batman’, soit à ‘Tina Fey’. Lorsque Batman et Tina Fey apparaissent dans la chaîne recherchée, la première occurrence du texte correspondant sera renvoyée en tant qu'objet Match.
Python3
# Python program to illustrate> # Matching regex objects> # with multiple Groups with the Pipe> import> re> heroRegex>=> re.>compile> (r>'Batman|Tina Fey'>)> mo1>=> heroRegex.search(>'Batman and Tina Fey.'>)> print>(mo1.group())> |
>
>
Sortir:
'Batman'>
Comprendre les accolades dans Regex
Si nous avons un groupe que nous voulons répéter un nombre spécifique de fois, suivez le groupe dans l'expression régulière avec un nombre entre accolades.
Par exemple, l'expression régulière (Ha){3} correspondra à la chaîne « HaHaHa », mais elle ne correspondra pas à « HaHa », puisque cette dernière n'a que deux répétitions du groupe (Ha). Au lieu d’un seul nombre, vous pouvez spécifier une plage entre les accolades. L'expression régulière (Ha){3, 5} correspondra à « HaHaHa », « HaHaHaHa » et « HaHaHaHaHa ». Vous pouvez également laisser de côté le premier ou le deuxième nombre entre accolades pour laisser le minimum ou le maximum illimité. (Ha){3, } correspondra à trois instances ou plus du groupe (Ha), tandis que (Ha){, 5} correspondra à zéro à cinq instances. Les accolades peuvent vous aider à raccourcir vos expressions régulières.
Exemple 1: Dans cet exemple, nous utiliserons des accolades pour spécifier l’occurrence du motif que nous recherchons.
Python3
# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo1>=> haRegex.search(>'HaHaHa'>)> print>(mo1.group())> |
>
>
Sortir:
HaHaHa>
Exemple 2 : Dans cet exemple, nous définirons l'occurrence du motif à l'aide d'accolades, puis rechercherons si un motif spécifique existe ou non.
Python3
# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo2>=> haRegex.search(>'Ha'>)>=>=> None> print>(mo2)> |
>
si et sinon en bash
>
Sortir:
True>
Opérateur facultatif ou point d'interrogation (?) dans l'expression régulière
Parfois, il existe un modèle auquel vous souhaitez faire correspondre uniquement de manière facultative. Autrement dit, l'expression régulière devrait trouver une correspondance, que ce morceau de texte soit présent ou non. Le ? Le caractère marque le groupe qui le précède comme partie facultative du modèle.
Exemple 1: Ici, nous allons rechercher un motif avec un motif « Batman » ou « Batwoman ». Le (où)? une partie de l'expression régulière signifie que le modèle wo est un groupe facultatif. L'expression régulière correspondra au texte contenant zéro instance ou une instance de wo. C'est pourquoi l'expression régulière correspond à la fois à « Batwoman » et à « Batman ». Vous pouvez penser au ? comme dit, groups Correspond à zéro ou à l'un des groupes précédant ce point d'interrogation.
Si vous devez faire correspondre un véritable point d'interrogation, échappez-le avec ?.
Python3
# Python program to illustrate> # optional matching> # with question mark(?)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)?man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())> print>(mo2.group())> |
>
>
Sortir:
Batman Batwoman>
Zéro ou plusieurs motifs correspondant à l'étoile
Le * (appelé étoile ou astérisque) signifie correspondre à zéro ou plus — le groupe qui précède l'étoile peut apparaître un nombre illimité de fois dans le texte. Il peut être complètement absent ou répété encore et encore. Si vous devez faire correspondre un caractère étoile réel, préfixez l'étoile dans l'expression régulière avec une barre oblique inverse, *.
Exemple 1: Dans cet exemple, nous ferons correspondre les occurrences nulles d'un modèle dans la chaîne. La partie (wo)* de l'expression régulière ne correspond à aucune instance de wo dans la chaîne.
Python3
# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> print>(mo1.group())> |
>
>
Sortir:
Batman>
Exemple 2 : Dans cet exemple, nous ferons correspondre au moins une occurrence d'un modèle dans la chaîne.
Python
#python program to illustrate> #matching a regular expression> #with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo2.group())> |
>
>
Sortir:
Batwoman>
Exemple 3 : Dans cet exemple, nous ferons correspondre plusieurs occurrences d’un modèle dans la chaîne.
Python
types de données en Java
# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo3>=> batRegex.search(>'The Adventures of Batwowowowoman'>)> print>(mo3.group())> |
>
>
Sortir:
Batwowowowoman>
Un ou plusieurs motifs correspondants avec le Plus
Alors que * moyens correspondre à zéro ou plus , le + (ou plus) signifie correspondre à un ou plusieurs. Contrairement à l'étoile, qui n'exige pas que son groupe apparaisse dans la chaîne correspondante, le groupe précédant un plus doit apparaître au moins une fois. Ce n’est pas facultatif. Si vous devez faire correspondre un caractère de signe plus réel, préfixez le signe plus avec une barre oblique inverse pour y échapper : +.
Exemple 1: Dans cet exemple, nous ferons correspondre au moins une occurrence d'un modèle dans la chaîne.
Python3
# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo1>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())> |
>
>
Sortir:
Batwoman>
Exemple 2 : Dans cet exemple, l'expression régulière Bat(wo)+man ne correspondra pas à la chaîne « Les Aventures de Batman » car au moins un wo est requis par le signe plus.
alphabet en numéro
Python
# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo3>=> batRegex.search(>'The Adventures of Batman'>)>=>=> None> print>(mo3)> |
>
>
Sortir:
True>
Article associé – Feuille de calcul Regex