⊗pyPmRELAB 72 of 129 menu

Positieve en negatieve lookahead en lookbehind in Python regex

Soms moet je een taak van dit type oplossen: zoek de string 'aaa' en vervang deze door '!', maar alleen als na 'aaa' een 'x' staat, en de 'x' zelf niet vervangen. Als we de taak 'rechttoe rechtaan' proberen op te lossen, zal het ons niet lukken:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # geeft '! baaa' uit, maar we wilden '!x baaa'

Lookahead

Om de taak op te lossen, is een manier nodig om te zeggen dat 'x' niet vervangen moet worden. Dit wordt gedaan met speciale haakjes (?= ), die alleen kijken, maar niet meenemen.

Deze haakjes worden positieve lookahead genoemd. Positief - omdat 'x' (in ons geval) aanwezig moet zijn - alleen dan vindt vervanging plaats.

Laten we deze haakjes toepassen om onze taak op te lossen:

txt = 'aaax baaa' res = re.sub('aaa(?=x)', '!', txt) print(res) # geeft '!x aaab uit

Er is ook negatieve lookahead - (?! ) - deze zegt juist dat iets niet aanwezig moet zijn. In het volgende voorbeeld vindt vervanging alleen plaats als na 'aaa' GEEN 'x' staat:

txt = 'aaax aaab' res = re.sub('aaa(?!x)', '!', txt) print(res) # geeft 'aaax !b' uit

Lookbehind

Op vergelijkbare wijze is er positieve lookbehind - (?<= ). In het volgende voorbeeld vindt vervanging alleen plaats als vóór 'aaa' een 'x' staat:

txt = 'xaaa' res = re.sub('(?<=x)aaa', '!', txt) print(res) # geeft 'x!' uit

En er is ook negatieve lookbehind - (?<! ). In het volgende voorbeeld vindt vervanging alleen plaats als vóór 'aaa' geen 'x' staat:

txt = 'baaa' res = re.sub('(?<!x)aaa', '!', txt) print(res) # geeft 'b!' uit

Praktische opdrachten

Gegeven een string die functienamen bevat:

txt = 'func1() func2() func3()'

Verkrijg een array van functienamen uit de string.

Gegeven een string met een tag:

txt = '<a href="" class="eee" id="zzz">'

Verkrijg een array van attribuutnamen van deze tag.

Gegeven een string met variabelen:

txt = '$aaa $bbb $ccc xxxx'

Verkrijg de substrings die worden voorafgegaan door een dollarteken.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren