⊗pyPmRELAB 72 of 129 menu

Pozitivni i negativni pregled u regularnim izrazima Pythona

Ponekad je potrebno rešiti problem sledećeg tipa: pronaći string 'aaa' i zameniti ga sa '!', ali samo ako posle 'aaa' stoji 'x', a sam 'x' pritom ne zamenjivati. Ako pokušamo da rešimo problem 'direktno', ništa neće uspeti:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # ispisace '! baaa', a hteli smo '!x baaa'

Pregled unapred

Za rešavanje problema potreban je način da se kaže da 'x' ne treba zameniti. To se radi pomoću specijalnih zagrada (?= ), koje samo proveravaju, ali ne uzimaju sa sobom.

Ove zagrade se zovu pozitivni pregled unapred. Pozitivni - jer 'x' (u našem slučaju) mora biti prisutan - tek tada će se zamena dogoditi.

Primenimo ove zagrade da rešimo naš problem:

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

Postoji i negativni pregled unapred - (?! ) - on, naprotiv, kaže da nešto ne sme biti prisutno. U sledećem primeru, zamena će se dogoditi samo ako posle 'aaa' stoji NE 'x':

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

Pregled unazad

Analogno tome, postoji pozitivni pregled unazad - (?<= ). U sledećem primeru zamena će se dogoditi samo ako ispred 'aaa' stoji 'x':

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

Postoji i negativni pregled unazad - (?<! ). U sledećem primeru zamena će se dogoditi samo ako ispred 'aaa' ne stoji 'x':

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

Praktični zadaci

Dat je string koji sadrži imena funkcija:

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

Pronađite niz imena funkcija iz stringa.

Dat je string sa tagom:

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

Pronađite niz imena atributa ovog taga.

Dat je string sa promenljivim:

txt = '$aaa $bbb $ccc xxxx'

Pronađite podstringove ispred kojih stoji znak dolara.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij