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".
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.
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.
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.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
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.
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 = '[email protected], [email protected], [email protected]'
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.
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 = '[email protected], [email protected], [email protected]'
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()
2. Hvad reprรฆsenterer tegnklassen \d i regulรฆre udtryk?
- Ethvert ciffer (0-9)
- Ethvert ikke-cifret tegn
- Ethvert mellemrumstegn
- Ethvert bogstav eller tal
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)
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.
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.







