⊗pyPmRELAB 72 of 129 menu

Positiv og negativ lookahead i Python regulære udtryk

Sommetider skal man løse en opgave af denne type: find strengen 'aaa' og erstat den med '!', men kun hvis efter 'aaa' kommer 'x', mens 'x' selv ikke skal erstattes. Hvis vi prøver at løse opgaven 'direkte', vil det ikke lykkes:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # udskriver '! baaa', men ønskede var '!x baaa'

Lookahead

For at løse opgaven er der brug for en måde at sige, at 'x' ikke skal erstattes. Dette gøres ved hjælp af specielle parenteser (?= ), der kun kigger, men ikke tager med sig.

Disse parenteser kaldes positiv lookahead. Positiv - fordi 'x' (i vores tilfælde) skal være til stede - kun så vil erstatningen finde sted.

Lad os anvende disse parenteser til at løse vores opgave:

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

Der findes også negativ lookahead - (?! ) - den siger, modsat, at noget ikke skal være til stede. I det følgende eksempel vil erstatning kun finde sted, hvis der IKKE står 'x' efter 'aaa':

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

Lookbehind

På samme måde findes der positiv lookbehind - (?<= ). I følgende eksempel vil erstatning kun finde sted, hvis der står 'x' foran 'aaa':

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

Og der er også negativ lookbehind - (?<! ). I følgende eksempel vil erstatning kun finde sted, hvis der IKKE står 'x' foran 'aaa':

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

Praktiske opgaver

Der gives en streng, der indeholder funktionsnavne:

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

Få et array med funktionsnavnene fra strengen.

Der gives en streng med et tag:

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

Få et array med navnene på dette tags attributter.

Der gives en streng med variable:

txt = '$aaa $bbb $ccc xxxx'

Få delstrengene, der har dollartegnet foran sig.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis