⊗pyPmRELAB 72 of 129 menu

Pozitivni in negativni pregled v regularnih izrazih Python

Včasih je treba rešiti nalogo te vrste: poišči niz 'aaa' in ga zamenjaj z '!', vendar le, če za 'aaa' stoji 'x', samega 'x' pa ne zamenjaj. Če poskušamo rešiti nalogo 'na silo', nam ne bo uspelo:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # izpiše '! baaa', želeli pa smo '!x baaa'

Pregled naprej

Za rešitev naloge potrebujemo način, da povemo, da 'x' ne smemo zamenjati. To naredimo s pomočjo posebnih oklepajev (?= ), ki samo pogledajo, vendar ne zajamejo s seboj.

Ti oklepaji se imenujejo pozitivni pregled naprej. Pozitivni - ker mora 'x' (v našem primeru) biti prisoten - šele takrat se bo zamenjava zgodila.

Uporabimo te oklepaje za rešitev naše naloge:

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

Obstaja tudi negativni pregled naprej - (?! ) - ta, nasprotno, pove, da nečesa ne sme biti. V naslednjem primeru se bo zamenjava zgodila le, če za 'aaa' ne stoji 'x':

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

Pregled nazaj

Podobno obstaja pozitivni pregled nazaj - (?<= ). V naslednjem primeru se bo zamenjava zgodila le, če pred 'aaa' stoji 'x':

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

Obstaja pa tudi negativni pregled nazaj - (?<! ). V naslednjem primeru se bo zamenjava zgodila le, če pred 'aaa' ne stoji 'x':

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

Praktične naloge

Podan je niz, ki vsebuje imena funkcij:

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

Pridobite seznam imen funkcij iz niza.

Podan je niz z oznako:

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

Pridobite seznam imen atributov te oznake.

Podan je niz s spremenljivkami:

txt = '$aaa $bbb $ccc xxxx'

Pridobite podnize, pred katerimi stoji znak dolarja.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni