# Группы символов в регулярных выражениях 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'`

Напишите регулярку, которая заменит все пробелы на `'!'`.

← →
↑