Python RegEx: re.match(), re.search(), re.findall() med Eksempel

Hvad er regulært udtryk i Python?

A Regulært udtryk (RE) i et programmeringssprog er en speciel tekststreng, der bruges til at beskrive et søgemønster. Det er yderst nyttigt til at udtrække information fra tekst såsom kode, filer, log, regneark eller endda dokumenter.

Mens du bruger Python regulære udtryk den første ting er at erkende er, at alt i bund og grund er et tegn, og vi skriver mønstre for at matche en bestemt sekvens af tegn, også kaldet streng. Ascii eller latinske bogstaver er dem, der er på dine tastaturer, og Unicode bruges til at matche den fremmede tekst. Det inkluderer cifre og tegnsætning og alle specialtegn som $#@!% osv.

For eksempel a Python regulære udtryk kunne fortælle et program om at søge efter specifik tekst fra strengen og derefter at udskrive resultatet i overensstemmelse hermed. Udtryk kan omfatte

  • Tekstmatchning
  • Gentagelse
  • forgrening
  • Mønster-sammensætning mv.

Regulært udtryk eller RegEx in Python er angivet som RE (RE'er, regexes eller regex-mønster) importeres igennem re modul. Python understøtter regulært udtryk gennem biblioteker. RegEx i Python understøtter forskellige ting som f.eks Modifikatorer, identifikatorer og mellemrumstegn.

Identifikatorer modifiers Hvide tegn Flugt påkrævet
\d= ethvert tal (et ciffer) \d repræsenterer et ciffer. Eks: \d{1,5} det vil erklære et ciffer mellem 1,5 som 424,444,545 osv. \n = ny linje . + * ? [] $ ^ () {} | \
\D= alt andet end et tal (et ikke-cifret) + = matcher 1 eller flere \s= mellemrum
\s = mellemrum
(tab, mellemrum, ny linje osv.)
? = matcher 0 eller 1 \t =faneblad
\S= alt andet end et mellemrum * = 0 eller mere \e = flugt
\w = bogstaver ( Match alfanumerisk tegn, inklusive "_") $ match slutningen af ​​en streng \r = vognretur
\W =alt undtagen bogstaver (matcher et ikke-alfanumerisk tegn, undtagen "_") ^ match start af en streng \f= formularfeed
. = alt andet end bogstaver (punktum) | matcher enten eller x/y ------
\b = ethvert tegn undtagen ny linje [] = interval eller "varians" ------
\. {x} = denne mængde af den foregående kode ------

Syntaks for regulært udtryk (RE).

import re
  • "re" modul medfølger Python bruges primært til strengsøgning og manipulation
  • Bruges også ofte til webside "skrabning” (udtræk store mængder data fra websteder)

Vi vil begynde udtryksvejledningen med denne enkle øvelse ved at bruge udtrykkene (w+) og (^).

Eksempel på w+ og ^ udtryk

  • "^": Dette udtryk matcher starten af ​​en streng
  • "w+“: Dette udtryk matcher det alfanumeriske tegn i strengen

Her vil vi se en Python RegEx Eksempel på hvordan vi kan bruge w+ og ^ udtryk i vores kode. Vi dækker funktionen re.findall() i Python, senere i denne vejledning, men i et stykke tid fokuserer vi blot på \w+ og \^ udtryk.

For eksempel, for vores streng "guru99, uddannelse er sjovt", hvis vi udfører koden med w+ og^, vil det give outputtet "guru99".

Eksempel på w+ og ^ udtryk

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

Husk, hvis du fjerner +tegn fra w+, vil outputtet ændre sig, og det vil kun give det første tegn i det første bogstav, dvs. [g]

Eksempel på \s udtryk i re.split funktion

  • "s": Dette udtryk bruges til at skabe et mellemrum i strengen

For at forstå, hvordan dette RegEx ind Python virker, begynder vi med en enkel Python RegEx Eksempel på en splitfunktion. I eksemplet har vi splittet hvert ord ved hjælp af “re.split”-funktionen og samtidig har vi brugt udtryk \s, der gør det muligt at parse hvert ord i strengen separat.

\s udtryk i re.split funktion

Når du udfører denne kode, vil den give dig outputtet ['vi', 'er', 'opdeling', 'the', 'ord'].

Lad nu se, hvad der sker, hvis du fjerner "\" fra s. Der er ikke noget 's'-alfabet i outputtet, det skyldes, at vi har fjernet '\' fra strengen, og det vurderer "s" som et regulært tegn og deler således ordene, hvor som helst det finder "s" i strengen.

\s udtryk i re.split funktion

På samme måde er der rækker af andre Python regulære udtryk, som du kan bruge på forskellige måder i Python som \d,\D,$,\.,\b osv.

Her er den komplette kode

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')))

Dernæst vil vi se de typer metoder, der bruges med regulært udtryk i Python.

Brug af regulære udtryksmetoder

"re"-pakken giver flere metoder til faktisk at udføre forespørgsler på en inputstreng. Vi vil se metoderne til re in Python:

  • re.match()
  • forskning()
  • re.findall()

Bemærk: Baseret på de regulære udtryk, Python tilbyder to forskellige primitive operationer. Matchmetoden kontrollerer kun for et match i begyndelsen af ​​strengen, mens søgning kontrollerer for et match hvor som helst i strengen.

re.match()

re.match() funktion af re in Python vil søge i det regulære udtryksmønster og returnere den første forekomst. De Python RegEx Match-metoden kontrollerer kun for et match i begyndelsen af ​​strengen. Så hvis der findes et match i den første linje, returnerer det matchobjektet. Men hvis der findes et match i en anden linje, Python RegEx Match-funktionen returnerer null.

Overvej for eksempel følgende kode af Python re.match() funktion. Udtrykket "w+" og "\W" vil matche ordene, der begynder med bogstavet 'g', og derefter identificeres alt, der ikke starter med 'g'. For at kontrollere match for hvert element i listen eller strengen, kører vi forloop i denne Python re.match() Eksempel.

re.match()

re.search(): Find mønster i tekst

forskning() funktionen vil søge i det regulære udtryksmønster og returnere den første forekomst. I modsætning til Python re.match(), vil den kontrollere alle linjer i inputstrengen. De Python re.search()-funktionen returnerer et match-objekt, når mønsteret er fundet, og "null", hvis mønsteret ikke findes

Hvordan bruger man søgning()?

For at bruge søgefunktionen () skal du importere Python remodul først, og kør derefter koden. De Python re.search()-funktionen tager "mønsteret" og "teksten" for at scanne fra vores hovedstreng

brug søgning()

For eksempel her ser vi efter to bogstavelige strenge "Software testing" "guru99", i en tekststreng "Software Test er sjovt”. Til "softwaretest" fandt vi matchen, derfor returnerer den outputtet af Python re.search() Eksempel som "fundet et match", mens ordet "guru99" ikke kunne findes i strengen, og derfor returnerer det output som "No match".

re.findall()

findall() modul bruges til at søge efter "alle" forekomster, der matcher et givet mønster. I modsætning hertil vil search()-modulet kun returnere den første forekomst, der matcher det angivne mønster. findall() vil iterere over alle linjerne i filen og vil returnere alle ikke-overlappende mønstermatches i et enkelt trin.

Sådan bruger du re.findall() i Python?

Her har vi en liste med e-mailadresser, og vi ønsker at alle e-mailadresser skal hentes ud af listen, vi bruger metoden re.findall() i Python. Den vil finde alle e-mailadresser fra listen.

Brug re.findall() i Python

Her er den komplette kode for Eksempel på 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 Flag

Mange Python Regex-metoder og Regex-funktioner tager et valgfrit argument kaldet Flags. Dette flag kan ændre betydningen af ​​det givne Python Regex mønster. For at forstå disse vil vi se et eller to eksempler på disse flag.

Forskellige flag brugt i Python omfatter

Syntaks for regex-flag Hvad gør dette flag
[re.M] Få start/slut til at overveje hver linje
[re.I] Den ignorerer sagen
[re.S] Lav [. ]
[re.U] Få { \w,\W,\b,\B} til at følge Unicode-regler
[re.L] Få {\w,\W,\b,\B} til at følge lokalitet
[re.X] Tillad kommentar i Regex

Eksempel på re.M eller Multiline Flag

I multiline matcher mønstertegnet [^] det første tegn i strengen og begyndelsen af ​​hver linje (følger umiddelbart efter hver ny linje). Mens udtrykket lille "w" bruges til at markere mellemrummet med tegn. Når du kører koden, udskriver den første variabel "k1" kun tegnet 'g' for word guru99, mens når du tilføjer multiline flag, henter den de første tegn af alle elementerne i strengen.

Eksempel på re.M eller Multiline Flag

Her er koden

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Vi erklærede variablen xx for streng ”guru99…. careerguru99….selen”
  • Kør koden uden at bruge flag multiline, det giver kun output 'g' fra linjerne
  • Kør koden med flag "multiline", når du udskriver 'k2' giver det output som 'g', 'c' og 's'
  • Så forskellen kan vi se efter og før tilføjelse af multi-linjer i ovenstående eksempel.

Ligeledes kan du også bruge andet Python flag som re.U (Unicode), re.L (Følg lokalitet), re.X (Tillad kommentar) osv.

Python 2 Eksempel

Ovenstående koder er Python 3 eksempler, hvis du vil løbe ind Python 2 Overvej venligst følgende kode.

# 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

Test din Python Viden

1. Hvilken metode bruges til at finde alle forekomster af et mønster i en streng?

  • forskning()
  • re.match()
  • re.findall()
  • re.split()
re.findall() bruges til at finde alle forekomster af et mønster i en streng.

2. Hvad repræsenterer tegnklassen \d i regulære udtryk?

  • Ethvert ciffer (0-9)
  • Ethvert ikke-cifret tegn
  • Ethvert mellemrumstegn
  • Ethvert bogstav eller tal
\d repræsenterer ethvert ciffer (0-9).

3. Hvilken funktion ville du bruge til at opdele en streng baseret på mellemrum?

  • re.split(r'\s', streng)
  • re.findall(r'\w+', streng)
  • re.match(r'\s+', streng)
  • re.split(r'\w+', streng)
re.split(r'\s', streng) opdeler en streng baseret på mellemrum ved hjælp af \s-udtrykket.

4. Hvad er hovedforskellen mellem re.match() og re.search()?

  • re.match() leder efter et mønster i starten af ​​en streng, mens re.search() leder efter et mønster hvor som helst i strengen.
  • re.match() returnerer alle matches, mens re.search() returnerer det første match.
  • re.search() er hurtigere end re.match().
  • Begge funktioner opfører sig på samme måde.
re.match() leder efter et mønster i starten af ​​en streng, mens re.search() leder efter et mønster hvor som helst i strengen.

Resumé

Et regulært udtryk i en programmeringssprog er en speciel tekststreng, der bruges til at beskrive et søgemønster. Det inkluderer cifre og tegnsætning og alle specialtegn som $#@!% osv. Udtryk kan omfatte bogstaveligt tal

  • Tekstmatchning
  • Gentagelse
  • forgrening
  • Mønster-sammensætning mv.

In Python, er et regulært udtryk betegnet som RE (RE'er, regexes eller regex-mønster) er indlejret gennem Python re modul.

  • "re" modul medfølger Python bruges primært til strengsøgning og manipulation
  • Bruges også ofte til webside "Scraping" (udtræk store mængder data fra websteder)
  • Regulære udtryksmetoder omfatter re.match(),re.search()& re.findall()
  • Andet Python RegEx-erstatningsmetoder er sub() og subn(), som bruges til at erstatte matchende strenge i re
  • Python Flag Mange Python Regex-metoder og Regex-funktioner tager et valgfrit argument kaldet Flags
  • Dette flag kan ændre betydningen af ​​det givne Regex-mønster
  • Various Python flag brugt i Regex Methods er re.M, re.I, re.S osv.

Læs mere Læs mere