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

โšก Smart opsummering

Python Vejledningen til regulรฆre udtryk dรฆkker re.match, re.search, re.findall og re.split gennem praktiske eksempler. Lessons forklarer metategn, tegnklasser, grupper, flag, substitution og almindelige mรธnstre til tekstparsing og validering.

  • ๐Ÿ”ค om modul: Importer re for at fรฅ match-, sรธgning-, findall-, split-, sub- og compileringsfunktioner til regex-opgaver.
  • ๐Ÿ“ Metategn: Mรธnstre kombinerer prik-, stjerne-, plus-, ankre- og tegnklasser for at udtrykke fleksible strengregler.
  • ๐ŸŽฏ match vs. sรธgning: match ankre ved strengens start, mens sรธgning scanner hele strengen for det fรธrste hit.
  • ???? find alle og opdel: findall returnerer alle ikke-overlapningerping match; split bryder en streng pรฅ regex-grรฆnser.
  • ๐Ÿ” Sub-erstatning: re.sub bytter matches med ny tekst eller et callback for avancerede teksttransformationer.
  • ๐Ÿค– Hjรฆlp til AI Regex: AI-assistenter genererer og forklarer Python regex-mรธnstre, hvilket reducerer tiden ved prรธvelse og fejl.

Python RegEx-vejledning

Hvad er regulรฆrt udtryk i Python?

A Regulรฆrt udtryk (RE) i et programmeringssprog er en sรฆrlig tekststreng, der bruges til at beskrive et sรธgemรธnster. Det er yderst nyttigt til f.eks.trachente information fra tekst sรฅsom kode, filer, logfiler, 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 "Arping" (f.eks.tracstore 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() Modulet bruges til at sรธge efter "alle" forekomster, der matcher et givet mรธnster. I modsรฆtning hertil returnerer search()-modulet kun den fรธrste forekomst, der matcher det angivne mรธnster. findall() itererer over alle linjerne i filen og returnerer alle ikke-overlappendeping mรธnstermatchninger 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.

Ofte Stillede Spรธrgsmรฅl

re.match returnerer kun et match-objekt, nรฅr mรธnsteret matcher i starten af โ€‹โ€‹strengen. re.search scanner hele strengen og returnerer det fรธrste match hvor som helst.

Ja. AI-vรฆrktรธjer som ChatGPT, Copilot og regex-specifikke assistenter genererer mรธnstre fra almindeligt sprog, forklarer indfangninger og oversรฆtter regex mellem sprog, samtidig med at de markerer almindelige faldgruber.

AI-vรฆrktรธjer fremhรฆver hver metakarakter, simulerer match trin for trin og foreslรฅr rettelser. De identificerer grรฅdige kvantifikatorproblemer, manglende escapes og anbefaler lookaheads, hvor det er nรธdvendigt.

Brug re.split(pattern, string). Den returnerer en liste over understrenge mellem matches. Mรธnsteret kan registrere afgrรฆnsere i grupper og inkludere de registrerede afgrรฆnsere i resultatet.

Kald re.sub(pattern, replacement, string). Erstatningen kan vรฆre en literal string med backreferences sรฅsom \\1, eller en funktion, der returnerer tekst beregnet fra hvert matchobjekt.

Flag รฆndrer mรธnsteradfรฆrd. re.IGNORECASE matcher store og smรฅ bogstaver i flรฆng. re.MULTILINE fรฅr ^ og $ til at matche linjegrรฆnser i stedet for kun strenggrรฆnser.

Ja. Katastrofal rygtracKing pรฅ indbyggede kvantifikatorer kan hรฆnge fortolkeren. Undgรฅ mรธnstre som (a+)+, foretrรฆk atomgrupper nรฅr de er tilgรฆngelige, og begrรฆns inputstรธrrelsen fรธr regex-evaluering.

re.compile returnerer et kompileret mรธnsterobjekt. Genbrug af det samme mรธnster pรฅ tvรฆrs af mange strenge er hurtigere, fordi kompileringen kun kรธrer รฉn gang. Det gรธr ogsรฅ brugen af โ€‹โ€‹regex tydeligere i kode.

Opsummer dette indlรฆg med: