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.
1234567891011121314import 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.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår