⊗pyPmRELAB 72 of 129 menu

Pozitív és negatív előre- és hátranézés a Python reguláris kifejezéseiben

Időnként a következő típusú feladatot kell megoldanunk: keressük meg a(z) 'aaa' sztringet és cseréljük ki a(z) '!' sztringre, de csak akkor, ha a(z) 'aaa' után 'x' áll, magát a(z) 'x'-et pedig ne cseréljük ki. Ha a feladatot 'közvetlenül' próbáljuk megoldani, akkor nem fog sikerülni:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # kiírja '! baaa', de mi '!x baaa'-t szeretnénk

Előrenézés

A feladat megoldásához szükség van egy módszerre, amivel elmondhatjuk, hogy a(z) 'x'-et ne cseréljük ki. Ezt a speciális zárójelek segítségével tehetjük meg: (?= ), amelyek csak "néznek", de nem "fogyasztják" a karaktereket.

Ezeket a zárójeleket pozitív előrenézésnek nevezzük. Pozitív - mert a(z) 'x'-nek (a mi esetünkben) jelen kell lennie - csak akkor történik meg a csere.

Alkalmazzuk ezeket a zárójeleket a feladatunk megoldására:

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

Létezik negatív előrenézés is - (?! ) - ez éppen ellenkezőleg azt mondja, hogy valaminek nem szabad jelen lennie. A következő példában a csere csak akkor történik meg, ha a(z) 'aaa' után NEM 'x' áll:

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

Hátranézés

Hasonló módon létezik pozitív hátranézés is - (?<= ). A következő példában a csere csak akkor történik meg, ha a(z) 'aaa' előtt 'x' áll:

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

És létezik negatív hátranézés is - (?<! ). A következő példában a csere csak akkor történik meg, ha a(z) 'aaa' előtt nem áll 'x':

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

Gyakorlati feladatok

Adott egy sztring, amely függvényneveket tartalmaz:

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

Kapja meg a függvénynevek tömbjét a sztringből.

Adott egy sztring egy taggel:

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

Kapja meg a tag attribútumainak neveit tartalmazó tömböt.

Adott egy sztring változókkal:

txt = '$aaa $bbb $ccc xxxx'

Kapja meg azon részsztringeket, amelyek előtt dollárjel áll.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás