Операторы повторения символов в регулярках
Бывают ситуации, когда нужно указать, что
символ повторяется заданное количество
раз. Если точное число повторений неизвестно,
то можно просто написать его несколько раз
- 'aaaa'
. Но что делать, если нужно
сказать такое: повторить один или более
раз?
Для этого существуют операторы (квантификаторы)
повторения: плюс +
(один и более
раз), звездочка *
(ноль или более
раз) и вопрос ?
(ноль или один раз).
Эти операторы действуют на тот символ,
который стоит перед ними.
Давайте посмотрим на работу этих операторов на примерах.
Пример
Найдем все подстроки по шаблону буква
'x'
, буква 'a'
один или более
раз, буква 'x'
:
txt = 'xx xax xaax xaaax xbx'
res = re.sub('xa+x', '!', txt)
print(res)
Результат выполнения кода:
'xx ! ! ! xbx'
Пример
Найдем все подстроки по шаблону буква
'x'
, буква 'a'
ноль или более
раз, буква 'x'
:
txt = 'xx xax xaax xaaax xbx'
res = re.sub('xa*x', '!', txt)
print(res)
Результат выполнения кода:
'! ! ! ! xbx'
Пример
Найдем все подстроки по шаблону буква
'x'
, буква 'a'
ноль или один
раз, буква 'x'
:
txt = 'xx xax xaax xbx'
res = re.sub('xa?x', '!', txt)
print(res)
Результат выполнения кода:
'! ! xaax xbx'
Практические задачи
Дана строка:
txt = 'aa aba abba abbba abca abea'
Напишите регулярку, которая найдет строки
'aba'
, 'abba'
, 'abbba'
по шаблону: буква 'a'
, буква
'b'
любое количество раз, буква
'a'
.
Дана строка:
txt = 'aa aba abba abbba abca abea'
Напишите регулярку, которая найдет строки
'aa'
, 'aba'
, 'abba'
,
'abbba'
по шаблону: буква
'a'
, буква 'b'
любое количество
раз (в том числе ни одного раза), буква
'a'
.
Дана строка:
txt = 'aa aba abba abbba abca abea'
Напишите регулярку, которая найдет строки
'aa'
, 'aba'
по шаблону:
буква 'a'
, буква 'b'
один
раз или ни одного, буква 'a'
.
Дана строка:
txt = 'aa aba abba abbba abca abea'
Напишите регулярку, которая найдет строки
'aa'
, 'aba'
, 'abba'
,
'abbba'
, не захватив 'abca'
и 'abea'
.