⊗pyPmREESCh 36 of 129 menu

Escape-ovanje specijalnih znakova u regularnim izrazima Pajtona

Pretpostavimo da treba da postavimo tako da specijalni znak označava samog sebe. Za to ga treba escape-ovati koristeći obrnutu kosu crtu. Hajde da pogledamo na primerima.

Primer

U sledećem primeru, autor regularnog izraza je želeo da šablon za pretragu izgleda ovako: slovo 'a', zatim plus '+', zatim slovo 'x'. Međutim, autor koda nije escape-ovao znak '+' i zato šablon za pretragu zapravo izgleda ovako: slovo 'a' jedno ili više puta, zatim slovo 'x':

txt = 'a+x ax aax aaax' res = re.sub('a+x', '!', txt) print(res)

Rezultat izvršenja koda:

'a+x ! ! !'

Primer

A sada je autor escape-ovao plus obrnutom kosom crtom. Sada šablon za pretragu izgleda tako kako treba: slovo 'a', zatim plus '+', zatim slovo 'x':

txt = 'a+x ax aax aaax' res = re.sub('a\+x', '!', txt) print(res)

Rezultat izvršenja koda:

'! ax aax aaax'

Primer

U ovom primeru šablon izgleda ovako: slovo 'a', zatim tačka '.', zatim slovo 'x':

txt = 'a.x abx azx' res = re.sub('a\.x', '!', txt) print(res)

Rezultat izvršenja koda:

'! abx azx'

Primer

U sledećem primeru autor je zaboravio da escape-uje tačku i pod regularni izraz su došli svi podstringovi, pošto neescape-ovana tačka označava bilo koji znak:

txt = 'a.x abx azx' res = re.sub('a.x', '!', txt) print(res)

Rezultat izvršenja koda:

'! ! !'

Napomena

Obratite pažnju na to da ako zaboravite obrnutu kosu crtu za tačku (kada ona treba da označava samu sebe) - to se može lako prevideti:

res = re.sub('a.x', '!', 'a.x') print(res) # vraća '!', kao što smo i želeli

Vizuelno radi ispravno (pošto tačka označava bilo koji znak, uključujući i običnu tačku '.'). Ali ako promenimo string u kome se vrše zamene - videćemo našu grešku:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # vraća '! ! !', a očekivano je '! abx azx'

Spisak specijalnih i običnih znakova

Ako escape-ujete običan znak - ništa strašno se neće desiti - on će i dalje označavati samog sebe. Izuzetak su cifre, one se ne mogu escape-ovati.

Često se postavlja pitanje da li je određeni znak specijalan. Neki idu dotle da escape-uju sve sumnjive znakove redom. Međutim, to je loša praksa (zagaduje regularni izraz obrnutim kosim crtama).

Specijalni znaci su: $ ^ . * + ? \ / {} [] () |

Nisu specijalni znaci: @ : , ' " - _ = < > % # ~ `& !

Praktični zadaci

Dat je string:

txt = 'a.a aba aea'

Napišite regularni izraz koji će naći string 'a.a', bez hvatanja ostalih.

Dat je string:

txt = '2+3 223 2223'

Napišite regularni izraz koji će naći string '2+3', bez hvatanja ostalih.

Dat je string:

txt = '23 2+3 2++3 2+++3 345 567'

Napišite regularni izraz koji će naći stringove '2+3', '2++3', '2+++3', bez hvatanja ostalih (+ može biti bilo koja količina).

Dat je string:

txt = '23 2+3 2++3 2+++3 445 677'

Napišite regularni izraz koji će naći stringove '23', '2+3', '2++3', '2+++3', bez hvatanja ostalih.

Dat je string:

txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

Napišite regularni izraz koji će naći stringove '*q+', '*qq+', '*qqq+', bez hvatanja ostalih.

Dat je string:

txt = '[abc] {abc} abc (abc) [abc]'

Napišite regularni izraz koji će naći stringove u uglastim zagradama i zameniti ih sa '!'.

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