⊗pyPmREESCh 36 of 129 menu

Экранироўка спецсімвалаў у рэгулярках Python

Выкажам здагадку, што трэба зрабіць так, каб спецсімвал абазначаў сам сябе. Для гэтага яго варта экранаваць з дапамогай адваротнага слешу. Давайце паглядзім на прыкладах.

Прыклад

У наступным прыкладзе аўтар рэгуляркі хацеў, каб шаблон пошуку выглядаў так: літара 'a', потым плюс '+', потым літара 'x'. Аднак, аўтар кода не заэкранаваў сімвал '+' і таму шаблон пошуку на самой справе ён выглядае так: літара 'a' адзін ці больш разоў, потым літара 'x':

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

Вынік выканання кода:

'a+x ! ! !'

Прыклад

А зараз аўтар заэкранаваў плюс адваротным слешам. Цяпер шаблон пошуку выглядае так, як трэба: літара 'a', потым плюс '+', потым літара 'x':

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

Вынік выканання кода:

'! ax aax aaax'

Прыклад

У гэтым прыкладзе шаблон выглядае так: літара 'a', потым кропка '.', потым літара 'x':

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

Вынік выканання кода:

'! abx azx'

Прыклад

У наступным прыкладзе аўтар забыўся заэкранаваць слеш і пад рэгулярку трапілі ўсе падрадкі, бо неэкранаваная кропка абазначае любы сімвал:

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

Вынік выканання кода:

'! ! !'

Заўвага

Звярніце ўвагу на тое, што калі вы забудзецеся адваротны слеш для кропкі (калі яна павінна абазначаць саму сябе) – гэтага можна нават не заўважыць:

res = re.sub('a.x', '!', 'a.x') print(res) # верне '!', як мы і хацелі

Візуальна працуе правільна (бо кропка абазначае любы сімвал, у тым ліку і звычайную кропку '.'). Але калі змяніць радок, у якім адбываюцца замены – мы ўбачым нашу памылку:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # верне '! ! !', а чакалася '! abx azx'

Спіс спецыяльных сімвалаў і звычайных

Калі экранаваць звычайны сімвал – нічога дрэннага не здарыцца – ён усё роўна будзе абазначаць сам сябе. Выключэнне – лічбы, іх нельга экранаваць.

Часта ўзнікае сумненне, ці з'яўляецца гэты сімвал спецыяльным. Некаторыя даходзяць да таго, што экрануюць усе падазроныя сімвалы падряд. Аднак, гэта дрэнная практыка (засмічвае рэгулярку адваротнымі слешамі).

З'яўляюцца спецсімваламі: $ ^ . * + ? \ / {} [] () |

Не з'яўляюцца спецсімваламі: @ : , ' " - _ = < > % # ~ `& !

Практычныя задачы

Дадзены радок:

txt = 'a.a aba aea'

Напішыце рэгулярку, якая знойдзе радок 'a.a', не захапіўшы астатнія.

Дадзены радок:

txt = '2+3 223 2223'

Напішыце рэгулярку, якая знойдзе радок '2+3', не захапіўшы астатнія.

Дадзены радок:

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

Напішыце рэгулярку, якая знойдзе радкі '2+3', '2++3', '2+++3', не захапіўшы астатнія (+ можа быць любая колькасць).

Дадзены радок:

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

Напішыце рэгулярку, якая знойдзе радкі '23', '2+3', '2++3', '2+++3', не захапіўшы астатнія.

Дадзены радок:

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

Напішыце рэгулярку, якая знойдзе радкі '*q+', '*qq+', '*qqq+', не захапіўшы астатнія.

Дадзены радок:

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

Напішыце рэгулярку, якая знойдзе радкі у квадратных дужках і замяніць іх на '!'.

Беларуская
AfrikaansAzərbaycanБългарскиবাংলাČeštinaDanskDeutschΕλληνικά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
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць