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 = '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.
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()
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.