Групи символи в регулярните изрази на Python
Съществуват специални команди, които
позволяват избор на цели групи
символи наведнъж. Командата \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'
Напишете регулярен израз, който заменя всички
интервали с '!'.