⊗pyPmREESCh 36 of 129 menu

Escapování speciálních znaků v regulárních výrazech Pythonu

Předpokládejme, že potřebujeme, aby speciální znak představoval sám sebe. K tomu je třeba jej escapovat pomocí zpětného lomítka. Podívejme se na příkladech.

Příklad

V následujícím příkladu autor regulárního výrazu chtěl, aby vyhledávací vzor vypadal takto: písmeno 'a', poté plus '+', poté písmeno 'x'. Avšak autor kódu neescapoval symbol '+', a proto vyhledávací vzor ve skutečnosti vypadá takto: písmeno 'a' jednou nebo vícekrát, poté písmeno 'x':

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

Výsledek provedení kódu:

'a+x ! ! !'

Příklad

A nyní autor escapoval plus zpětným lomítkem. Nyní vyhledávací vzor vypadá tak, jak má: písmeno 'a', poté plus '+', poté písmeno 'x':

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

Výsledek provedení kódu:

'! ax aax aaax'

Příklad

V tomto příkladu vzor vypadá takto: písmeno 'a', poté tečka '.', poté písmeno 'x':

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

Výsledek provedení kódu:

'! abx azx'

Příklad

V následujícím příkladu autor zapomněl escapovat tečku a pod regulární výraz spadly všechny podřetězce, protože neescapovaná tečka představuje libovolný znak:

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

Výsledek provedení kódu:

'! ! !'

Poznámka

Všimněte si, že pokud zapomenete zpětné lomítko pro tečku (když by měla představovat samu sebe) - lze to snadno přehlédnout:

res = re.sub('a.x', '!', 'a.x') print(res) # vrátí '!', jak jsme chtěli

Vizuálně to funguje správně (protože tečka představuje libovolný znak, včetně obyčejné tečky '.'). Ale pokud změníme řetězec, ve kterém se provádějí nahrazení - uvidíme naši chybu:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # vrátí '! ! !', ale očekávalo se '! abx azx'

Seznam speciálních a obyčejných symbolů

Pokud escapujete obyčejný symbol - nic se nestane - bude stále představovat sám sebe. Výjimkou jsou číslice, ty nelze escapovat.

Často vzniká pochybnost, zda je daný symbol speciální. Někteří docházejí k tomu, že escapují všechny podezřelé symboly najednou. To je však špatná praxe (zaneřádí regulární výraz zpětnými lomítky).

Speciálními symboly jsou: $ ^ . * + ? \ / {} [] () |

Nejsou speciálními symboly: @ : , ' " - _ = < > % # ~ `& !

Praktické úlohy

Daný řetězec:

txt = 'a.a aba aea'

Napište regulární výraz, který najde řetězec 'a.a', a nezachytí ostatní.

Daný řetězec:

txt = '2+3 223 2223'

Napište regulární výraz, který najde řetězec '2+3', a nezachytí ostatní.

Daný řetězec:

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

Napište regulární výraz, který najde řetězce '2+3', '2++3', '2+++3', a nezachytí ostatní (+ může být libovolný počet).

Daný řetězec:

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

Napište regulární výraz, který najde řetězce '23', '2+3', '2++3', '2+++3', a nezachytí ostatní.

Daný řetězec:

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

Napište regulární výraz, který najde řetězce '*q+', '*qq+', '*qqq+', a nezachytí ostatní.

Daný řetězec:

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

Napište regulární výraz, který najde řetězce v hranatých závorkách a nahradí je '!'.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout