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.
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)
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.
Bedankt voor je feedback!
Vraag AI
Vraag AI
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.
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)
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.
Bedankt voor je feedback!