Групе симбола у регуларним изразима Пајтона
Постоје специјалне команде које
омогућавају одабир читавих група
симбола одједном. Команда \d означава цифру
од 0 до 9. Команда \w
означава цифру, латинично слово или знак
подвлачења. Команда \s означава
размак или размачни симбол: размак,
прелазак у нови ред, табулацију. Може се инвертовати
вриједност команде, писањем великог слова:
на примјер, ако је \d - цифра, онда је
\D - не цифра.
Пример
Хајде да пронађемо све цифре:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Резултат извршавања кода:
'! !! !!!'
Пример
Оператори понављања сматрају команде-групе
јединством, односно груписане заграде
нису потребне. У сљедећем примјеру шаблон претраге
изгледа овако: цифра од 0 до
9 један или више пута:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Резултат извршавања кода:
'! ! ! abc @@@'
Пример
У сљедећем примјеру шаблон претраге изгледа
овако: било шта један или више пута,
али не цифра од 0 до 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Резултат извршавања кода:
'123!3!'
Пример
У овом примјеру шаблон претраге изгледа овако: размачни симбол једанпут:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Резултат извршавања кода:
'1!12!123!abc!@@@'
Пример
У овом примјеру шаблон претраге изгледа
овако: НЕ размачни симбол један или више
пута. Сви поднизови, раздвојени
размацима, замјениће се са '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Резултат извршавања кода:
'! ! ! ! !'
Пример
У овом примјеру шаблон претраге изгледа
овако: цифра или слово један или више
пута. Сви поднизови, састављени од цифри
и слова, замјениће се са '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Резултат извршавања кода:
'! ! ! ! @@@'
Пример
У овом примјеру шаблон претраге изгледа
овако: НЕ цифра и НЕ слово један или више
пута. Под ову дефиницију у нашем
случају спада '@@@' и сви размаци
(они такође нису цифре ни слова).
Обратите пажњу на то да је на крају један
'!' - у њега се претворио низ
' @@@' - са размаком напријед:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Резултат извршавања кода:
'1!12!123!Abc!'
Практични задаци
Дат је низ:
txt = 'a1a a2a a3a a4a a5a aba aca'
Напишите регуларку која ће пронаћи низове,
у којима по ивицама стоје слова 'a',
а између њих једна цифра.
Дат је низ:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Напишите регуларку која ће пронаћи низове,
у којима по ивицама стоје слова 'a',
а између њих било колико цифара.
Дат је низ:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Напишите регуларку која ће пронаћи низове,
у којима по ивицама стоје слова 'a',
а између њих било колико цифара (укључујући
и нула цифара, односно низ
'aa').
Дат је низ:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Напишите регуларку која ће пронаћи низове
следећег вида: по ивицама стоје слова
'a' и 'b', а између њих -
не број и не размак.
Дат је низ:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Напишите регуларку која ће пронаћи низове
следећег вида: по ивицама стоје слова
'a' и 'b', а између њих -
не слово, не цифра и не размак.
Дат је низ:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Напишите регуларку која ће замијенити све
размаке на '!'.