Набори от символи в регулярни изрази на Python
Групите символи \d и \w не са
много гъвкави. Дори такава проста задача,
като намери всички букви, но не цифри -
не може да бъде решена с тях. За такива задачи
следва да се използват квадратни скоби,
които представляват операция 'или'.
Квадратните скоби заместват един
символ, който е любой от изброените вътре. Например, ето така: x[abc]x -
казваме, че в краищата трябва да стоят букви
'x', а вътре - един символ: или 'a',
или 'b', или 'c'.
След квадратни скоби могат да се пишат
оператори за повторение. Например, ето така:
x[abc]+x - казваме, че между
'x'-овете може да има произволен брой символи
'a', 'b' и 'c' - в
каквито и да е комбинации.
Може не само да се изброяват символи, но
и да се създават групи от символи, като се запише между
два символа тире. Например, ето така:
[a-d] - получаваме всички символи от
'a' до 'd'.
Нека да разгледаме примери.
Пример
В този пример шаблонът за търсене изглежда
така: между 'x'-овете всяка буква от
'a' до 'z':
Резултат от изпълнението на кода:
'! ! ! x@x'
Пример
В този пример шаблонът за търсене изглежда
така: между 'x'-овете всяка буква от
'a' до 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'! ! xmx x@x'
Пример
В този пример шаблонът за търсене изглежда
така: между 'x'-овете всяка буква от
'A' до 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'xax ! xcx x@x'
Пример
В този пример шаблонът за търсене изглежда
така: между 'x'-овете всяка цифра от 0
до 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'xax ! ! ! x@x'
Пример
В този пример шаблонът за търсене изглежда
така: между 'x'-овете всяка цифра от 3
до 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'xax x1x ! ! x@x'
Пример
В този пример шаблонът за търсене изглежда
така: между 'x'-овете всяка буква от
'a' до 'z' или цифра от
1 до 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'! ! ! ! x@x'
Пример
В този пример шаблонът за търсене изглежда
така: между 'x'-овете всяка буква от
'a' до 'z' или буква от
'A' до 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'! ! ! x5x x@x'
Пример
В този пример шаблонът за търсене изглежда
така: между 'x'-овете всяка буква от
'a' до 'z' или цифри 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'! ! ! ! x3x'
Пример
В този пример шаблонът за търсене изглежда
така: между 'x'-овете букви от 'a'
до 'z' в количество от 1 и
повече:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'xx ! ! ! x123x xa3x'
Пример
Нека направим така, че броят на буквите да може да бъде и нула:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
В резултат ще получим:
'! ! ! ! x123x xa3x'
Пример
Вътре в квадратните скоби също могат да се посочват екранирани символи. Нека намерим последователност от букви и цифри, повтаряща се нула или повече пъти:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'! x@x ! ! !'
Пример
Ако трябва да посочим още един квадратни скоби, то и те също трябва да се екранират:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Резултат от изпълнението на кода:
'! ! ! x3x'
Практически задачи
Даден е низ:
txt = 'aba aea aca aza axa'
Напишете регулярен израз, който ще намери по
следния шаблон: в краищата стоят букви
'a', а между тях - буква 'b',
'e' или 'x'.
Даден е низ:
txt = 'a1a a3a a7a a9a aba'
Напишете регулярен израз, който ще намери по
следния шаблон: в краищата стоят букви
'a', а между тях - цифра от
3 до 6.
Даден е низ:
txt = 'aba aea afa aha aga'
Напишете регулярен израз, който ще намери по
следния шаблон: в краищата стоят букви
'a', а между тях - буква от
'a' до 'g'.
Даден е низ:
txt = 'aba aea afa aha aga'
Напишете регулярен израз, който ще намери по
следния шаблон: в краищата стоят букви
'a', а между тях - буква от
'a' до 'f' и от 'j'
до 'z'.
Даден е низ:
txt = 'aAa aea aEa aJa a3a'
Напишете регулярен израз, който ще намери по
следния шаблон: в краищата стоят букви
'a', а между тях - буква от
'a' до 'f' и от 'A'
до 'D'.
Даден е низ:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Напишете регулярен израз, който ще намери по
следния шаблон: в краищата стоят букви
'a', а между тях - малки
латински букви, без да засяга останалите.
Даден е низ:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Напишете регулярен израз, който ще намери по
следния шаблон: в краищата стоят букви
'a', а между тях - малки и
главни латински букви, без да засяга
останалите.
Даден е низ:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Напишете регулярен израз, който ще намери по
следния шаблон: в краищата стоят букви
'a', а между тях - малки
латински букви и цифри, без да засяга
останалите.