Python RegEx : re.match(), re.search(), re.findall() avec exemple

Qu'est-ce que l'expression rรฉguliรจre dans Python?

A Expression rรฉguliรจre (RE) dans un langage de programmation, il s'agit d'une chaรฎne de texte spรฉciale utilisรฉe pour dรฉcrire un modรจle de recherche. Il est extrรชmement utile pour extraire des informations ร  partir de textes tels que du code, des fichiers, des journaux, des feuilles de calcul ou mรชme des documents.

En utilisant le Python expression rรฉguliรจre la premiรจre chose ร  reconnaรฎtre est que tout est essentiellement un caractรจre et que nous รฉcrivons des modรจles pour correspondre ร  une sรฉquence spรฉcifique de caractรจres รฉgalement appelรฉe chaรฎne. Les lettres ascii ou latines sont celles qui se trouvent sur vos claviers et Unicode est utilisรฉ pour faire correspondre le texte รฉtranger. Il comprend les chiffres, la ponctuation et tous les caractรจres spรฉciaux comme $#@!%, etc.

Par exemple, un Python une expression rรฉguliรจre pourrait indiquer ร  un programme de rechercher un texte spรฉcifique dans la chaรฎne, puis d'imprimer le rรฉsultat en consรฉquence. L'expression peut inclure

  • Correspondance de texte
  • Rรฉpรฉtition
  • Branchement
  • Composition du motif, etc.

Expression rรฉguliรจre ou RegEx dans Python est notรฉ RE (les RE, les regex ou les modรจles d'expressions rรฉguliรจres) sont importรฉs via concernant le module. Python prend en charge l'expression rรฉguliรจre via les bibliothรจques. RegEx dans Python prend en charge diverses choses comme Modificateurs, identifiants et espaces blancs.

Identifiants Modificateurs Caractรจres d'espacement blancs ร‰vasion requise
\d= n'importe quel nombre (un chiffre) \d reprรฉsente un chiffre.Ex : \d{1,5} il dรฉclarera un chiffre compris entre 1,5 comme 424,444,545   etc. \n = nouvelle ligne . + * ? [] $ ^ () {} | \
\D= tout sauf un nombre (un non-chiffre) + = correspond ร  1 ou plus \s= espace
\s = espace
(tabulation, espace, nouvelle ligne, etc.)
? = correspond ร  0 ou 1 \t =onglet
\S= tout sauf un espace * = 0 ou plus \e = รฉchapper
\w = lettres ( Correspond au caractรจre alphanumรฉrique, y compris ยซ _ ยป) $ correspond ร  la fin d'une chaรฎne \r = retour chariot
\W = tout sauf les lettres ( Correspond ร  un caractรจre non alphanumรฉrique excluant ยซ _ ยป) ^ correspond au dรฉbut d'une chaรฎne \f= saut de page
. = tout sauf des lettres (points) | correspond soit ร  x/y ------
\b = n'importe quel caractรจre sauf la nouvelle ligne [] = plage ou ยซ variance ยป ------
\. {x} = cette quantitรฉ de code prรฉcรฉdent ------

Syntaxe des expressions rรฉguliรจres (RE)

import re
  • Module ยซ re ยป inclus avec Python principalement utilisรฉ pour la recherche et la manipulation de chaรฎnes
  • ร‰galement utilisรฉ frรฉquemment pour la page Web "Grattageยป (extraire une grande quantitรฉ de donnรฉes de sites Web)

Nous commencerons le didacticiel sur les expressions par cet exercice simple en utilisant les expressions (w+) et (^).

Exemple d'expression w+ et ^

  • ยซ ^ ยป : Cette expression correspond au dรฉbut d'une chaรฎne
  • "w +ยซ : Cette expression correspond au caractรจre alphanumรฉrique de la chaรฎne

Nous verrons ici un Python RegEx Exemple de la faรงon dont nous pouvons utiliser les expressions w+ et ^ dans notre code. Nous couvrons la fonction re.findall() dans Python, plus tard dans ce tutoriel, mais pendant un certain temps, nous nous concentrons simplement sur l'expression \w+ et \^.

Par exemple, pour notre chaรฎne ยซ guru99, education is fun ยป si nous exรฉcutons le code avec w+ et ^, cela donnera le rรฉsultat ยซ guru99 ยป.

Exemple d'expression w+ et ^

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

N'oubliez pas que si vous supprimez le signe + du w+, le rรฉsultat changera et ne donnera que le premier caractรจre de la premiรจre lettre, c'est-ร -dire [g]

Exemple d'expression \s dans la fonction re.split

  • ยซ s ยป : Cette expression est utilisรฉe pour crรฉer un espace dans la chaรฎne

Pour comprendre comment cette RegEx dans Python fonctionne, nous commenรงons par un simple Python RegEx Exemple de fonction fractionnรฉe. Dans l'exemple, nous avons divisรฉ chaque mot ร  l'aide de la fonction ยซ re.split ยป et en mรชme temps nous avons utilisรฉ l'expression \s qui permet d'analyser chaque mot de la chaรฎne sรฉparรฉment.

expression \s dans la fonction re.split

Lorsque vous exรฉcutez ce code, il vous donnera le rรฉsultat ['nous', 'sont', 'splitting', 'the', 'words'].

Voyons maintenant ce qui se passe si vous supprimez ยซ \ ยป de s. Il n'y a pas d'alphabet ยซ s ยป dans la sortie, c'est parce que nous avons supprimรฉ ยซ \ ยป de la chaรฎne, et il รฉvalue ยซ s ยป comme un caractรจre rรฉgulier et divise ainsi les mots partout oรน il trouve ยซ s ยป dans la chaรฎne.

expression \s dans la fonction re.split

De mรชme, il existe une sรฉrie d'autres Python expression rรฉguliรจre que vous pouvez utiliser de diffรฉrentes maniรจres dans Python comme \d,\D,$,\.,\b, etc.

Voici le code complet

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

Ensuite, nous verrons les types de mรฉthodes utilisรฉes avec les expressions rรฉguliรจres dans Python.

Utiliser des mรฉthodes d'expression rรฉguliรจre

Le package ยซ re ยป fournit plusieurs mรฉthodes pour effectuer rรฉellement des requรชtes sur une chaรฎne dโ€™entrรฉe. Nous verrons les mรฉthodes de re in Python:

  • re.match()
  • recherche()
  • re.findall()

Note: Basรฉ sur les expressions rรฉguliรจres, Python propose deux opรฉrations primitives diffรฉrentes. La mรฉthode match recherche une correspondance uniquement au dรฉbut de la chaรฎne tandis que la mรฉthode search recherche une correspondance n'importe oรน dans la chaรฎne.

re.match()

re.match() fonction de re dans Python recherchera le modรจle d'expression rรฉguliรจre et renverra la premiรจre occurrence. Le Python La mรฉthode RegEx Match recherche une correspondance uniquement au dรฉbut de la chaรฎne. Ainsi, si une correspondance est trouvรฉe dans la premiรจre ligne, elle renvoie l'objet de correspondance. Mais si une correspondance est trouvรฉe dans une autre ligne, le Python La fonction RegEx Match renvoie null.

Par exemple, considรฉrons le code suivant de Python fonction re.match(). L'expression ยซ w+ ยป et ยซ \W ยป correspondra aux mots commenรงant par la lettre ยซ g ยป et par la suite, tout ce qui ne commence pas par ยซ g ยป n'est pas identifiรฉ. Pour vรฉrifier la correspondance de chaque รฉlรฉment de la liste ou de la chaรฎne, nous exรฉcutons la boucle for dans ce Python re.match() Exemple.

re.match()

re.search() : recherche d'un modรจle dans le texte

recherche() La fonction recherchera le modรจle dโ€™expression rรฉguliรจre et renverra la premiรจre occurrence. Contrairement ร  Python re.match(), il vรฉrifiera toutes les lignes de la chaรฎne d'entrรฉe. Le Python La fonction re.search() renvoie un objet de correspondance lorsque le modรจle est trouvรฉ et "null" si le modรจle n'est pas trouvรฉ

Comment utiliser la recherche() ?

Pour utiliser la fonction search(), vous devez importer Python re module d'abord, puis exรฉcutez le code. Le Python La fonction re.search() prend le ยซ motif ยป et le ยซ texte ยป ร  analyser ร  partir de notre chaรฎne principale

utiliser la recherche()

Par exemple, nous recherchons ici deux chaรฎnes littรฉrales ยซ Software testing ยป ยซ guru99 ยป, dans une chaรฎne de texte ยซ Software Tests c'est amusant ยป. Pour les ยซ tests logiciels ยป, nous avons trouvรฉ la correspondance et renvoie donc la sortie de Python re.search() Exemple comme ยซ trouvรฉ une correspondance ยป, tandis que pour le mot ยซ guru99 ยป, nous n'avons pas pu trouver dans la chaรฎne, il renvoie donc la sortie comme ยซ Aucune correspondance ยป.

re.findall()

Trouver tout() Le module est utilisรฉ pour rechercher ยซ toutes ยป les occurrences qui correspondent ร  un modรจle donnรฉ. En revanche, le module search() ne renverra que la premiรจre occurrence correspondant au modรจle spรฉcifiรฉ. findall() parcourra toutes les lignes du fichier et renverra toutes les correspondances de modรจle qui ne se chevauchent pas en une seule รฉtape.

Comment utiliser re.findall() dans Python?

Ici, nous avons une liste d'adresses e-mail, et nous voulons que toutes les adresses e-mail soient extraites de la liste, nous utilisons la mรฉthode re.findall() dans PythonIl trouvera toutes les adresses e-mail de la liste.

 Utilisez re.findall() dans Python

Voici le code complet pour l'exemple de re.findall()

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python Drapeaux

Merci beaucoup Python Les mรฉthodes Regex et les fonctions Regex prennent un argument facultatif appelรฉ Flags. Ces drapeaux peuvent modifier la signification de ce qui est donnรฉ Python Modรจle d'expression rรฉguliรจre. Pour les comprendre, nous verrons un ou deux exemples de ces drapeaux.

Divers drapeaux utilisรฉs dans Python inclut

Syntaxe des indicateurs Regex A quoi sert ce drapeau
[re.M] Faire en sorte que le dรฉbut/la fin considรจre chaque ligne
[re.I] Il ignore le cas
[res.S] Faire [ . ]
[re.U] Make { \w,\W,\b,\B} suit les rรจgles Unicode
[re.L] Faire en sorte que {\w,\W,\b,\B} suive les paramรจtres rรฉgionaux
[re.X] Autoriser les commentaires dans Regex

Exemple de drapeaux re.M ou multilignes

En multiligne, le caractรจre de motif [^] correspond au premier caractรจre de la chaรฎne et au dรฉbut de chaque ligne (suivant immรฉdiatement chaque nouvelle ligne). Tandis que l'expression petit ยซ w ยป est utilisรฉe pour marquer l'espace avec des caractรจres. Lorsque vous exรฉcutez le code, la premiรจre variable ยซ k1 ยป imprime uniquement le caractรจre ยซ g ยป pour le mot guru99, tandis que lorsque vous ajoutez un indicateur multiligne, elle rรฉcupรจre les premiers caractรจres de tous les รฉlรฉments de la chaรฎne.

Exemple de drapeaux re.M ou multilignes

Voici le code

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Nous avons dรฉclarรฉ la variable xx pour la chaรฎne ยซ guru99โ€ฆ. carriรจregourou99โ€ฆ.sรฉlรฉnium ยป
  • Exรฉcutez le code sans utiliser de drapeaux multilignes, il ne donne que le rรฉsultat ยซ g ยป des lignes
  • Exรฉcutez le code avec l'indicateur ยซ multiligne ยป, lorsque vous imprimez ยซ k2 ยป, le rรฉsultat est ยซ g ยป, ยซ c ยป et ยซ s ยป.
  • Ainsi, la diffรฉrence que nous pouvons voir aprรจs et avant lโ€™ajout de plusieurs lignes dans lโ€™exemple ci-dessus.

De mรชme, vous pouvez รฉgalement utiliser dโ€™autres Python des indicateurs comme re.U (Unicode), re.L (Suivre les paramรจtres rรฉgionaux), re.X (Autoriser les commentaires), etc.

Python 2 Exemple

Les codes ci-dessus sont Python 3 exemples, si vous souhaitez courir Python 2 veuillez considรฉrer le code suivant.

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

Testez votre Python Connaissances

1. Quelle mรฉthode est utilisรฉe pour trouver toutes les occurrences d'un motif dans une chaรฎne ?

  • recherche()
  • re.match()
  • re.findall()
  • re.split()
re.findall() est utilisรฉ pour trouver toutes les occurrences d'un motif dans une chaรฎne.

2. Que reprรฉsente la classe de caractรจres \d dans les expressions rรฉguliรจres ?

  • N'importe quel chiffre (0-9)
  • Tout caractรจre non numรฉrique
  • Tout caractรจre d'espacement
  • N'importe quelle lettre ou chiffre
\d reprรฉsente n'importe quel chiffre (0-9).

3. Quelle fonction utiliseriez-vous pour diviser une chaรฎne en fonction des espaces ?

  • re.split(r'\s', chaรฎne)
  • re.findall(r'\w+', chaรฎne)
  • re.match(r'\s+', chaรฎne)
  • re.split(r'\w+', chaรฎne)
re.split(r'\s', string) divise une chaรฎne en fonction des espaces ร  l'aide de l'expression \s.

4. Quelle est la principale diffรฉrence entre re.match() et re.search() ?

  • re.match() recherche un modรจle au dรฉbut d'une chaรฎne, tandis que re.search() recherche un modรจle n'importe oรน dans la chaรฎne.
  • re.match() renvoie toutes les correspondances, tandis que re.search() renvoie la premiรจre correspondance.
  • re.search() est plus rapide que re.match().
  • Les deux fonctions se comportent de la mรชme maniรจre.
re.match() recherche un modรจle au dรฉbut d'une chaรฎne, tandis que re.search() recherche un modรจle n'importe oรน dans la chaรฎne.

Rรฉsumรฉ

Une expression rรฉguliรจre dans un langage de programmation est une chaรฎne de texte spรฉciale utilisรฉe pour dรฉcrire un modรจle de recherche. Il comprend des chiffres, des signes de ponctuation et tous les caractรจres spรฉciaux comme $#@!%, etc. L'expression peut inclure des caractรจres littรฉraux.

  • Correspondance de texte
  • Rรฉpรฉtition
  • Branchement
  • Composition du motif, etc.

In Python, une expression rรฉguliรจre est notรฉe RE (les RE, les expressions rรฉguliรจres ou les modรจles d'expression rรฉguliรจre) sont incorporรฉs via Python concernant le module.

  • Module ยซ re ยป inclus avec Python principalement utilisรฉ pour la recherche et la manipulation de chaรฎnes
  • ร‰galement utilisรฉ frรฉquemment pour le ยซ Scraping ยป de pages Web (extraire une grande quantitรฉ de donnรฉes de sites Web)
  • Les mรฉthodes d'expression rรฉguliรจre incluent re.match(),re.search()& re.findall()
  • Autres Python Les mรฉthodes de remplacement RegEx sont sub() et subn() qui sont utilisรฉes pour remplacer les chaรฎnes correspondantes dans re
  • Python Drapeaux Merci beaucoup Python Les mรฉthodes Regex et les fonctions Regex prennent un argument facultatif appelรฉ Flags
  • Ces indicateurs peuvent modifier la signification du modรจle Regex donnรฉ
  • Variables Python les indicateurs utilisรฉs dans les mรฉthodes Regex sont re.M, re.I, re.S, etc.

Rรฉsumez cet article avec :