Python Урок 12

## Регулярные выражение

**Регулярные выражение** — это строка, которая задает шаблон поиска для строк в тексте. То есть, одному шаблону будет соответствовать много строчек в тексте.

**Регулярные выражение** — это шаблон по которому осуществляется поиск. Регулярные выражение регистра-зависимые.

Например, у вас есть большой файл (произведение "Евгений Онегин"), и нужно найти, сколько раз в этом произведении встречается фамилия Онегин. Благодаря регулярным выражениям и поиску по документам вы сможете найти, сколько раз этот шаблон "Онегин", который вы задаете, находиться в вашем тексте.

Любая строка или набор специальных командных последовательностей может являться шаблоном и регулярным выражением.

### Модуль re

В python для работы с регулярными выражениями, есть модуль re. Он уже поставляться с языком программирования, его нужно импортировать в свою программу как в уроке 08. В нем нам нужно узнать наиболее часто используемых и популярных методов которые позволяют работать с регулярными выражениями.

```
import re

s = "AC/DCAC/DCAC/DCAC/DCAC/DCAC/DCAC/DC" *# Строчка текста*

```

## Методы

### Метод match

Метод match ищет по заданному регулярному выражению совпадение в начале строки.

```
import re

s = "AC/DCAC/DCAC/DCAC/DCAC/DCAC/DCAC/DC" *# Строчка текста.*
result = re.match("AC", s) *# в первом аргументе, что вы ищете. Во втором в какой строке вы ищете.*
print(result)

```

Если вы напишете AC то он найдет текст в начале строки, а если DC то нет. Потому что DC не в начале строки.

### Метод findall

Метод search ищет по заданному регулярному выражению совпадение на протяжении всей строки, и возвращает первое найденное.

```
import re

s = "AC/DCAC/DCAC/DCAC/DCAC/DCAC/DCAC/DC"
result = re.search("DC", s)
print(result)

```

Если вы ходите вывести результат не со всем описанием, то вы выводе добавите 0 print(result[0]).

```
import re

s = "AC/DCAC/DCAC/DCAC/DCAC/DCAC/DCAC/DC"
result = re.search("DC", s)
print(result[0])

```

### Метод findall

Метод findall ищет и возвращает список всех найденных подстрок в нашей строке. То есть не как метод search находит только первое, а выводит все и стразу их компонует.

```
import re

s = "AC/DCAC/DCAC/DCAC/DCAC/DCAC/DCAC/DC"
result = re.findall("DC", s)
print(result)  *# Выведет именно список.*

```

### Метод split

Метод split разделяет строчку и создает список по заданным регулярным выражениям.

```
import re

s = "AC/DCAC/DCAC/DCAC/DCAC/DCAC/DCAC/DC"
result = re.split("/", s) *# разделит строчки по /.*
print(result)

```

Методу split можно указать третий аргумент maxsplit. Он выполнит разделение на элементы списка, столько раз, сколько вы укажите.

```
import re

s = "AC/DCAC/DCAC/DCAC/DCAC/DCAC/DCAC/DC"
result = re.split("/", s, maxsplit = 3) *# разделит строчки по /, до 3 раз*
print(result)

```

### Метод sub

Метод sub разделяет то регулярное выражение которое мы дали, на любую другую подсочку. То есть одну подстроку заменяет на другую подстроку.

```
import re

s = "AC/DCAC/DCAC/DCAC/DCAC/DCAC/DCAC/DC"
result = re.sub("A", "O", s) *# в первом аргументе, что вы ищете. Во втором на что заменяете. в третей в какой строке вы ищете/заменяете.*
print(result)

 *# в строчке "s" заменит все "A" на "O".*

```

### Метод fullmatch

Метод fullmatch проверяет подходит ли регулярное выражение под нашу конкретную строчку. То есть он их сравнивает совпадает они или нет.

```
import re

s = "AC/DCAC/DCAC/DCAC/DCAC/DCAC/DCAC/DC"
result = re.fullmatch ("A", s) *# Проверяет является регулярное выражение самой строчкой s*
print(result) *# Выведет то, что строчка s не является регулярным выражением*

```

Если мы переменную строчку s заменим на A, то он проверит является ли наше регулярное выражение полным совпадением нашей строчки.

```
import re

s = "A"
result = re.fullmatch ("A", s) *# Проверяет является регулярное выражение самой строчкой s*
print(result) *# Выведет то, что строчка s является регулярным выражением*

```