Группы символов в регулярных выражениях 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'
Напишите регулярку, которая заменит все
пробелы на '!'
.