Екранирање специјалних карактера у регуларним изразима Пајтона
Претпоставимо да је потребно да се специјални карактер користи да означи самог себе. За то је потребно да га екранирамо помоћу обрнуте косе црте. Погледајмо примере.
Пример
У следећем примеру аутор регуларног израза је желео
да шаблон за претрагу изгледа овако: слово
'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]'
Напишите регуларни израз који ће пронаћи ниске
у угластим заградама и заменити их са
'!'.