Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Lookahead, Lookbehind en Niet-gretige Matching | Geavanceerde Reguliere Expressies en Toepassingen
Python Regular Expressions

Lookahead, Lookbehind en Niet-gretige Matching

Veeg om het menu te tonen

Inzicht in geavanceerde reguliere expressie-functies zoals lookahead, lookbehind en niet-gretige kwantoren stelt je in staat om zeer nauwkeurige patroonherkenning uit te voeren in Python. Lookahead en lookbehind zijn vormen van zero-width assertions, waarmee je kunt controleren of een patroon zich vóór of achter je huidige positie in de tekst bevindt (of juist niet), zonder dat dit patroon zelf wordt opgenomen in de match. Niet-gretige kwantoren geven je controle over hoeveel tekst een patroon oppikt, zodat je alleen zoveel mogelijk tekst matcht als nodig is.

  • Lookahead wordt geschreven als (?=...) en controleert of een bepaald patroon volgt op de huidige positie;
  • Lookbehind, geschreven als (?<=...), controleert of een bepaald patroon voorafgaat aan de huidige positie;
  • Niet-gretige kwantoren zoals *? en +? passen het standaard gretige gedrag van kwantoren aan;
  • Standaard matchen kwantoren zoals * en + zoveel mogelijk tekst; door een ? toe te voegen maak je ze niet-gretig, zodat ze zo weinig mogelijk tekst matchen.

Een lookahead-voorbeeld: \w+(?=\d) matcht een woord alleen als het direct gevolgd wordt door een cijfer, maar het cijfer zelf maakt geen deel uit van de match. Een lookbehind werkt vergelijkbaar, maar dan in de tegenovergestelde richting.

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)

Hoe lookahead en niet-gretige kwantoren patroonherkenning beïnvloeden

Het lookahead-patroon \w+(?=\d) in het voorbeeld matcht elke reeks woordtekens (\w+) alleen als deze direct gevolgd wordt door een cijfer (\d). Het resultaat van de match bevat het cijfer niet, omdat lookahead de tekens die het controleert niet verbruikt. Dit is handig wanneer je woorden wilt vinden die aan een bepaalde voorwaarde voldoen over wat erna komt, zonder dat dit volgende deel wordt opgenomen in de match.

De niet-gretige kwantor *? in <b>(.*?)</b> bepaalt hoeveel tekst er wordt gematcht tussen de <b> en </b> tags. Een gretige kwantor zoals .* zou zoveel mogelijk tekst matchen, mogelijk alles van de eerste <b> tot de laatste </b>. Door *? te gebruiken, matcht het patroon zo weinig mogelijk tekst en wordt alleen de tekst tussen elk paar tags afzonderlijk opgehaald. Dit voorkomt overmatching en zorgt ervoor dat je de kleinste mogelijke overeenkomende substring extraheert.

Lookahead en niet-gretige kwantoren geven je krachtige controle over hoe reguliere expressies tekst selecteren:

  • Lookahead maakt het mogelijk om te controleren of een match gevolgd wordt door een specifiek patroon zonder dit op te nemen;
  • Niet-gretige kwantoren helpen voorkomen dat je meer tekst oppikt dan nodig is.
question mark

Wat doet de niet-gretige kwantor *??

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 1

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Lookahead, Lookbehind en Niet-gretige Matching

Inzicht in geavanceerde reguliere expressie-functies zoals lookahead, lookbehind en niet-gretige kwantoren stelt je in staat om zeer nauwkeurige patroonherkenning uit te voeren in Python. Lookahead en lookbehind zijn vormen van zero-width assertions, waarmee je kunt controleren of een patroon zich vóór of achter je huidige positie in de tekst bevindt (of juist niet), zonder dat dit patroon zelf wordt opgenomen in de match. Niet-gretige kwantoren geven je controle over hoeveel tekst een patroon oppikt, zodat je alleen zoveel mogelijk tekst matcht als nodig is.

  • Lookahead wordt geschreven als (?=...) en controleert of een bepaald patroon volgt op de huidige positie;
  • Lookbehind, geschreven als (?<=...), controleert of een bepaald patroon voorafgaat aan de huidige positie;
  • Niet-gretige kwantoren zoals *? en +? passen het standaard gretige gedrag van kwantoren aan;
  • Standaard matchen kwantoren zoals * en + zoveel mogelijk tekst; door een ? toe te voegen maak je ze niet-gretig, zodat ze zo weinig mogelijk tekst matchen.

Een lookahead-voorbeeld: \w+(?=\d) matcht een woord alleen als het direct gevolgd wordt door een cijfer, maar het cijfer zelf maakt geen deel uit van de match. Een lookbehind werkt vergelijkbaar, maar dan in de tegenovergestelde richting.

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)

Hoe lookahead en niet-gretige kwantoren patroonherkenning beïnvloeden

Het lookahead-patroon \w+(?=\d) in het voorbeeld matcht elke reeks woordtekens (\w+) alleen als deze direct gevolgd wordt door een cijfer (\d). Het resultaat van de match bevat het cijfer niet, omdat lookahead de tekens die het controleert niet verbruikt. Dit is handig wanneer je woorden wilt vinden die aan een bepaalde voorwaarde voldoen over wat erna komt, zonder dat dit volgende deel wordt opgenomen in de match.

De niet-gretige kwantor *? in <b>(.*?)</b> bepaalt hoeveel tekst er wordt gematcht tussen de <b> en </b> tags. Een gretige kwantor zoals .* zou zoveel mogelijk tekst matchen, mogelijk alles van de eerste <b> tot de laatste </b>. Door *? te gebruiken, matcht het patroon zo weinig mogelijk tekst en wordt alleen de tekst tussen elk paar tags afzonderlijk opgehaald. Dit voorkomt overmatching en zorgt ervoor dat je de kleinste mogelijke overeenkomende substring extraheert.

Lookahead en niet-gretige kwantoren geven je krachtige controle over hoe reguliere expressies tekst selecteren:

  • Lookahead maakt het mogelijk om te controleren of een match gevolgd wordt door een specifiek patroon zonder dit op te nemen;
  • Niet-gretige kwantoren helpen voorkomen dat je meer tekst oppikt dan nodig is.
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 1
some-alt