Наборы символов в регулярных выражениях Python
Группы символов \d и \w не
очень гибкие. Даже такая простая задача,
как найти все буквы, но не цифры -
не может быть решена ими. Для таких задач
следует использовать квадратные скобки, представляющие
собой операцию 'или'.
Квадратные скобки заменяют собой один символ,
любой из перечисленных внутри. К примеру,
вот так: x[abc]x - мы говорим, что
по краям должны стоять буквы икс, а внутри
- один символ: или 'a', или 'b',
или 'c'.
После квадратных скобок можно писать операторы
повторения. К примеру, вот так: x[abc]+x
- мы говорим, что внутри иксов может быть
любое количество символов 'a', 'b'
и 'c' - в любых комбинациях.
Можно не только перечислять символы, но создавать
группы символов, записывая между двумя символами
дефис. К примеру, вот так: [a-d] -
мы получаем все символы от 'a' до
'd'.
Давайте посмотрим на примерах.
Пример
В данном примере шаблон поиска выглядит так:
между иксами любая буква от 'a'
до 'z':
Результат выполнения кода:
'! ! ! x@x'
Пример
В данном примере шаблон поиска выглядит так:
между иксами любая буква от 'a'
до 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Результат выполнения кода:
'! ! xmx x@x'
Пример
В данном примере шаблон поиска выглядит так:
между иксами любая буква от 'A'
до 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Результат выполнения кода:
'xax ! xcx x@x'
Пример
В данном примере шаблон поиска выглядит так:
между иксами любая цифра от
0 до 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Результат выполнения кода:
'xax ! ! ! 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'
Пример
В данном примере шаблон поиска выглядит так:
между иксами любая буква от 'a'
до 'z' или цифра от 1
до 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Результат выполнения кода:
'! ! ! ! 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'
Пример
В данном примере шаблон поиска выглядит так:
между иксами любая буква от 'a'
до 'z' или цифры 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Результат выполнения кода:
'! ! ! ! x3x'
Пример
В данном примере шаблон поиска выглядит так:
между иксами буквы от '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',
а между ними - маленькие латинские буквы
и цифры, не затронув остальных.