⊗pyPmREESCh 36 of 129 menu

Escapovanie špeciálnych znakov v regulárnych výrazoch Python

Predpokladajme, že potrebujeme, aby špeciálny znak označoval sám seba. Na to je potrebné escapovať ho pomocou spätného lomítka. Pozrime sa na príklady.

Príklad

V nasledujúcom príklade autor regulárneho výrazu chcel, aby vyhľadávací vzor vyzeral takto: písmeno 'a', potom plus '+', potom písmeno 'x'. Avšak, autor kódu neescapoval znak '+' a preto vyhľadávací vzor v skutočnosti vyzerá takto: písmeno 'a' jeden alebo viac krát, potom písmeno 'x':

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

Výsledok vykonania kódu:

'a+x ! ! !'

Príklad

A teraz autor escapoval plus spätným lomítkom. Teraz vyhľadávací vzor vyzerá tak, ako treba: písmeno 'a', potom plus '+', potom písmeno 'x':

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

Výsledok vykonania kódu:

'! ax aax aaax'

Príklad

V tomto príklade vzor vyzerá takto: písmeno 'a', potom bodka '.', potom písmeno 'x':

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

Výsledok vykonania kódu:

'! abx azx'

Príklad

V nasledujúcom príklade autor zabudol escapovať lomítko a pod regulárny výraz spadli všetky podreťazce, pretože neescapovaná bodka označuje akýkoľvek znak:

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

Výsledok vykonania kódu:

'! ! !'

Poznámka

Všimnite si, že ak zabudnete spätné lomítko pre bodku (keď má označovať samu seba) - toto sa dá ľahko prehliadnuť:

res = re.sub('a.x', '!', 'a.x') print(res) # vráti '!', ako sme chceli

Vizuálne funguje správne (pretože bodka označuje akýkoľvek znak, vrátane obyčajnej bodky '.'). Ale ak zmeníme reťazec, v ktorom sa vykonávajú náhrady - uvidíme našu chybu:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # vráti '! ! !', ale očakávalo sa '! abx azx'

Zoznam špeciálnych symbolov a obyčajných

Ak escapujeme obyčajný symbol - nič zlého sa nestane - stále bude označovať sám seba. Výnimka - čísla, tie nie je možné escapovať.

Často vznikajú pochybnosti, či je daný symbol špeciálny. Niektorí ľudia až tak, že escapujú všetky podozrivé symboly bez poradia. Avšak, toto je zlá prax (zanáša regulárny výraz spätnými lomítkami).

Špeciálne symboly sú: $ ^ . * + ? \ / {} [] () |

Nie sú špeciálne symboly: @ : , ' " - _ = < > % # ~ `& !

Praktické úlohy

Daný reťazec:

txt = 'a.a aba aea'

Napíšte regulárny výraz, ktorý nájde reťazec 'a.a', bez zachytenia ostatných.

Daný reťazec:

txt = '2+3 223 2223'

Napíšte regulárny výraz, ktorý nájde reťazec '2+3', bez zachytenia ostatných.

Daný reťazec:

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

Napíšte regulárny výraz, ktorý nájde reťazce '2+3', '2++3', '2+++3', bez zachytenia ostatných (+ môže byť ľubovoľné množstvo).

Daný reťazec:

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

Napíšte regulárny výraz, ktorý nájde reťazce '23', '2+3', '2++3', '2+++3', bez zachytenia ostatných.

Daný reťazec:

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

Napíšte regulárny výraz, ktorý nájde reťazce '*q+', '*qq+', '*qqq+', bez zachytenia ostatných.

Daný reťazec:

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

Napíšte regulárny výraz, ktorý nájde reťazce v hranatých zátvorkách a nahradí ich '!'.

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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť