Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lookahead, Lookbehind og Ikke-grådig Matching | Avanserte Regulære Uttrykk og Anvendelser
Python Regulære Uttrykk

Lookahead, Lookbehind og Ikke-grådig Matching

Sveip for å vise menyen

Forståelse av avanserte funksjoner i regulære uttrykk som lookahead, lookbehind og ikke-grådige kvantifikatorer gjør det mulig å utføre svært presis mønstergjenkjenning i Python. Lookahead og lookbehind er typer nullbredde-påstander, som lar deg sjekke om et mønster finnes (eller ikke finnes) foran eller bak din nåværende posisjon i teksten, uten å inkludere dette mønsteret i selve treffet. Ikke-grådige kvantifikatorer gir deg kontroll over hvor mye tekst et mønster fanger opp, slik at du kun matcher så mye som nødvendig.

  • Lookahead skrives som (?=...) og sjekker om et bestemt mønster følger etter nåværende posisjon;
  • Lookbehind, skrevet som (?<=...), sjekker om et bestemt mønster kommer før nåværende posisjon;
  • Ikke-grådige kvantifikatorer som *? og +? endrer standard grådig oppførsel til kvantifikatorer;
  • Som standard matcher kvantifikatorer som * og + så mye tekst som mulig; ved å legge til en ? gjør du dem ikke-grådige, slik at de matcher så lite tekst som mulig.

Et eksempel på lookahead: \w+(?=\d) matcher et ord kun hvis det umiddelbart etterfølges av et siffer, men sifferet er ikke en del av treffet. En lookbehind fungerer på lignende måte, men i motsatt retning.

1234567891011121314
import re # Lookahead: Match words followed by a digit text = "apple1 banana2 cherry pie" pattern_lookahead = r"\w+(?=\d)" matches_lookahead = re.findall(pattern_lookahead, text) print("Lookahead matches:", matches_lookahead) # Non-greedy matching: Extract text between tags html = "<b>Bold</b> and <b>Strong</b>" pattern_nongreedy = r"<b>(.*?)</b>" matches_nongreedy = re.findall(pattern_nongreedy, html) print("Non-greedy matches:", matches_nongreedy)

Hvordan lookahead og ikke-grådige kvantifikatorer påvirker mønstergjenkjenning

Lookahead-mønsteret \w+(?=\d) i eksempelet matcher enhver sekvens av ordtegn (\w+) kun hvis det direkte etterfølges av et siffer (\d). Treffet inkluderer ikke sifferet, fordi lookahead ikke forbruker tegnene den sjekker etter. Dette er nyttig når du vil finne ord som oppfyller en bestemt betingelse for hva som kommer etter, uten å inkludere denne delen i treffet.

Den ikke-grådige kvantifikatoren *? i <b>(.*?)</b> endrer hvor mye tekst som matches mellom <b> og </b>-taggene. En grådig kvantifikator som .* ville matchet så mye som mulig, og potensielt fanget alt fra første <b> til siste </b>. Ved å bruke *? matcher mønsteret så lite som mulig, og fanger kun teksten inne i hvert taggpar individuelt. Dette forhindrer overmatching og sikrer at du henter ut den minste mulige treffstrengen.

Lookahead og ikke-grådige kvantifikatorer gir deg kraftig kontroll over hvordan regulære uttrykk velger tekst:

  • Lookahead lar deg sjekke at et treff etterfølges av et spesifikt mønster uten å inkludere det;
  • Ikke-grådige kvantifikatorer hjelper deg å unngå å fange mer tekst enn nødvendig.
question mark

Hva gjør den ikke-grådige kvantifikatoren *??

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 1

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 3. Kapittel 1
some-alt