⊗pyPmREESCh 36 of 129 menu

Escaping posebnih znakov v regularnih izrazih Python

Predpostavimo, da želimo, da poseben znak predstavlja samega sebe. Za to ga moramo escapirati z uporabo poševnice nazaj. Poglejmo si primere.

Primer

V naslednjem primeru je avtor regularnega izraza želel, da bi vzorec iskanja izgledal takole: črka 'a', nato plus '+', nato črka 'x'. Vendar avtor kode ni escapiral znaka '+', zato vzorec iskanja dejansko izgleda takole: črka 'a' enkrat ali večkrat, nato črka 'x':

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

Rezultat izvajanja kode:

'a+x ! ! !'

Primer

Tokrat je avtor escapiral plus z poševnico nazaj. Zdaj vzorec iskanja izgleda tako, kot bi moral: črka 'a', nato plus '+', nato črka 'x':

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

Rezultat izvajanja kode:

'! ax aax aaax'

Primer

V tem primeru vzorec izgleda takole: črka 'a', nato pika '.', nato črka 'x':

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

Rezultat izvajanja kode:

'! abx azx'

Primer

V naslednjem primeru je avtor pozabil escapirati poševnico in so bile vse podnize zajete, ker neescapirana pika predstavlja poljuben znak:

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

Rezultat izvajanja kode:

'! ! !'

Opomba

Bodite pozorni, da če pozabite poševnico nazaj za piko (ko bi morala predstavljati samo sebe) - tega morda sploh ne opazite:

res = re.sub('a.x', '!', 'a.x') print(res) # vrne '!', kot smo želeli

Vizualno deluje pravilno (ker pika predstavlja poljuben znak, vključno z navadno piko '.'). Toda če zamenjamo niz, v katerem potekajo zamenjave - bomo videli svojo napako:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # vrne '! ! !', pričakovali pa smo '! abx azx'

Seznam posebnih simbolov in navadnih

Če escapirate navaden znak - se nič hudega ne zgodi - še vedno bo predstavljal samega sebe. Izjema so številke, teh ni mogoče escapirati.

Pogosto se pojavi dvom, ali je določen znak poseben. Nekateri segajo do tega, da escapirajo vse sumljive znake zaporedoma. Vendar je to slaba praksa (onesnaži regularni izraz s poševnicami nazaj).

So posebni znaki: $ ^ . * + ? \ / {} [] () |

Niso posebni znaki: @ : , ' " - _ = < > % # ~ `& !

Praktične naloge

Dan je niz:

txt = 'a.a aba aea'

Napišite regularni izraz, ki bo našel niz 'a.a', ne da bi zajel ostale.

Dan je niz:

txt = '2+3 223 2223'

Napišite regularni izraz, ki bo našel niz '2+3', ne da bi zajel ostale.

Dan je niz:

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

Napišite regularni izraz, ki bo našel nize '2+3', '2++3', '2+++3', ne da bi zajel ostale (+ je lahko poljubno število).

Dan je niz:

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

Napišite regularni izraz, ki bo našel nize '23', '2+3', '2++3', '2+++3', ne da bi zajel ostale.

Dan je niz:

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

Napišite regularni izraz, ki bo našel nize '*q+', '*qq+', '*qqq+', ne da bi zajel ostale.

Dan je niz:

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

Napišite regularni izraz, ki bo našel nize v oglatih oklepajih in jih zamenjal z '!'.

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