> For the complete documentation index, see [llms.txt](https://timosii.gitbook.io/py_tutorial/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://timosii.gitbook.io/py_tutorial/stroki.-spiski/regulyarnye-vyrazheniya-regex.md).

# Регулярные выражения (regex)\*

* Это *шаблоны соответствия текста*, описанные в формальном синтаксисе. Шаблоны интерпретируются как *набор инструкций*, которые затем выполняются со *строкой в ​​качестве входных данных* для создания соответствующего подмножества или модифицированной версии оригинала. Регулярные выражения могут включать в себя буквальное сопоставление текста, повторение, ветвление и другие сложные правила. Регулярные выражения обычно используются в приложениях, которые требуют *тонкую обработку текста*.
* Инструмент для работы с текстом
* Позволяют искать, извлекать и манипулировать текстовыми данными на основе заданных шаблонов
* В Python регулярные выражения реализованы в модуле 're'

Вот несколько основных понятий и примеров использования регулярных выражений:

1. **Символы и метасимволы (символы имеющие специальное значение)**:

* `.`: Соответствует любому символу, кроме новой строки.
* `*`: Соответствует нулю или более повторениям предыдущего символа.
* `+`: Соответствует одному или более повторениям предыдущего символа.
* `?`: Соответствует нулю или одному повторению предыдущего символа.
* `[]`: Символьный класс, соответствует любому из перечисленных символов. Например, `[aeiou]` соответствует любой гласной букве.
* `[^]`: Инвертированный символьный класс, соответствует любому символу, который не находится в перечисленных скобках.
* `|`: ИЛИ, соответствует одному из двух выражений. Например, `cat|dog` соответствует "cat" или "dog".

2. **Специальные последовательности**:

* `\d`: Соответствует любой цифре (эквивалентно `[0-9]`).
* `\D`: Соответствует любому символу, который не является цифрой.
* `\w`: Соответствует любой букве или цифре (эквивалентно `[a-zA-Z0-9]`).
* `\W`: Соответствует любому символу, который не является буквой или цифрой.
* `\s`: Соответствует любому пробельному символу (пробел, табуляция, новая строка).
* `\S`: Соответствует любому символу, который не является пробельным.

3. **Группировка и квантификация (поиск последовательностей):**

* `()`: Группирует выражение.
* `{n}`: Соответствует ровно n повторениям предыдущего символа.
* `{n, m}`: Соответствует от n до m повторений предыдущего символа.
* `{n,}`: Соответствует n или более повторениям предыдущего символа.
* `^`: Соответствует началу строки.
* `$`: Соответствует концу строки.

***

* Примеры использования:

```python
import re

# Поиск слова в строке
text = "Привет, мир!"
pattern = r"мир"
match = re.search(pattern, text)

if match:
    print("Найдено совпадение:", match.group())
else:
    print("Совпадений не найдено")

# Проверка, является ли строка числом:
text = "12345"
pattern = r"^\d+$"
if re.match(pattern, text):
    print("Строка является числом")
else:
    print("Строка не является числом")

# Разделение строки на слова:
text = "Привет, мир! Как дела?"
words = re.split(r"\W+", text)  # Разделяем по не-буквенным символам
print(words)
```

```python
# Поиск числа в строке
text = "Ваш заказ №12345 готов."
match = re.search(r'\d+', text)
if match:
    print("Найдено число:", match.group())

# Поиск email-адреса в тексте
text = "Мой email: example@mail.com"
match = re.search(r'\w+@\w+\.\w+', text)
if match:
    print("Найден email:", match.group())

# Разделение строки по запятой и пробелу
text = "apple, banana, cherry"
words = re.split(r',\s*', text)
print("Разделенные слова:", words)

# Замена слова
text = "Интересный интерфейс"
new_text = re.sub(r'интер', 'экстр', text, flags=re.IGNORECASE)
print("Замененный текст:", new_text)

~# Найдено число: 12345
~# Найден email: example@mail.com
~# Разделенные слова: ['apple', 'banana', 'cherry']
~# Замененный текст: экстресный экстрфейс
```

* [Подробнее о регулярных выражениях в Python](https://docs-python.ru/standart-library/modul-re-python/)
* [Синтаксис регулярных выражений в Python](https://docs-python.ru/standart-library/modul-re-python/sintaksis-reguljarnogo-vyrazhenija/)

### Практика

* Повторите примеры из урока, проанализируйте результат
