52.85K
Category: programmingprogramming

Регулярные выражения. Лекция 13

1.

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

2.

Что такое регулярные выражения?
Регулярные выражения
описывают
множество
специальный язык.
(regular
строк,
expressions)
используя
Для работы с регулярными выражениями в Python
используется модуль re.
import re
Пример. Замена слова.
import re
text = "Я люблю программирование на Python"
pattern = r'Python'
replacement = 'JavaScript'
new_text = re.sub(pattern, replacement, text)
print(new_text) # Вывод: 'Я люблю программирование на JavaScript’
Пример. Извлечение дат.
import re
text = "Сегодня 2023-10-11, а завтра будет 2023-10-12"
pattern = r'\d{4}-\d{2}-\d{2}'
dates = re.findall(pattern, text)
print(dates) # Вывод: ['2023-10-11', '2023-10-12']

3.

Формирование шаблона
Символы-метасимволы:
Специальные последовательности:
. - Любой символ, кроме новой строки.
^ - Начало строки.
$ - Конец строки.
* - 0 или более повторений предыдущего символа или
группы.
+ - 1 или более повторений предыдущего символа или
группы.
? - 0 или 1 повторение предыдущего символа или группы.
[] - Символьный класс. Соответствует любому из символов
в скобках.
| - ИЛИ. Соответствует либо левой части, либо правой.
"\1" - "\9" Группа с указанным номером. Группы нумеруются,
начиная с 1
"\A" Промежуток перед началом всей строки (почти
аналогично "^")
"\Z" Промежуток перед концом всей строки (почти
аналогично "$" )
"\b" Промежуток между символами перед словом или после
него
"\B" Наоборот, не соответствует промежутку между
символами на границе слова
"\d" Цифра. Аналогично "[0-9]"
"\s" Любой пробельный символ. Аналогично "[\t\n\r\f\v]"
"\S" Любой непробельный символ. Аналогично "[^\t\n\r\f\v]"
"\w" Любая цифра или буква (зависит от флага LOCALE )
"\W" Любой символ, не являющийся цифрой или буквой
(зависит от флага LOCALE )
Квантификаторы:
{n} - Ровно n повторений.
{n,} - Минимум n повторений.
{n,m} - От n до m повторений.

4.

Примеры шаблонов
Поиск числа с плавающей точкой:
\d+\.\d+ #Найдет все числа с плавающей точкой.
Пример 1. Поиск и подсчет чисел в тексте
import re
Поиск даты в формате "ГГГГ-ММ-ДД":
\d{4}-\d{2}-\d{2} # Найдет даты в формате "ГГГГ-ММ-ДД".
def count_numbers(text):
pattern = r'\d+'
numbers = re.findall(pattern, text)
return len(numbers), numbers
Поиск HTML-тегов:
<.*?> # Найдет все HTML-теги.
Поиск слов, начинающихся с большой буквы:
\b[A-Z][a-z]*\b # Найдет все слова, начинающиеся с
большой буквы.
text = "В этом тексте 123 числа и 456 еще числа."
count, numbers = count_numbers(text)
Пример 2. Поиск хештегов в социальных сетях
import re
Поиск электронных почт:
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b
# Найдет адреса электронной почты.
text = "Сегодня #пятница, и я рад этому #вечер"
pattern = r'#\w+'
Поиск хештегов:
#\w+ # Найдет все слова, начинающиеся с символа #.
hashtags = re.findall(pattern, text)
print(hashtags) # Вывод: ['#пятница', '#вечер']

5.

Методы объекта-шаблона
re.search(pattern, string) - Ищет первое совпадение
с регулярным выражением pattern в строке string.
Возвращает объект совпадения (MatchObject) или
None, если совпадение не найдено.
import re
pattern = r'apple'
string = 'I have an apple and a banana'
match = re.search(pattern, string)
if match:
print('Найдено совпадение:', match.group())
else:
print('Совпадение не найдено’)
Найдено совпадение: apple
re.match(pattern, string) - Ищет совпадение только в начале
строки. Возвращает объект совпадения (MatchObject) или
None, если совпадение не найдено.
import re
pattern = r'apple'
string = 'apple pie is delicious'
match = re.match(pattern, string)
if match:
print('Найдено совпадение в
match.group())
else:
print('Совпадение не найдено’)
начале
Найдено совпадение в начале строки: apple
строки:',

6.

Методы объекта-шаблона
re.findall(pattern, string) - Находит все совпадения с
регулярным выражением pattern в строке string.
Возвращает список всех найденных совпадений.
import re
pattern = r'\d+' # Находит все последовательности
цифр
string = 'There are 123 apples and 456 bananas'
matches = re.findall(pattern, string)
print('Найденные совпадения:', matches)
Найденные совпадения: ['123', '456']
re.finditer(pattern, string) - Находит все совпадения с
регулярным выражением pattern в строке string. Возвращает
итератор, каждый элемент которого представляет объект
совпадения (MatchObject).
import re
pattern = r'\d+' # Находит все последовательности
цифр
string = 'There are 123 apples and 456 bananas'
matches = re.finditer(pattern, string)
for match in matches:
print('Найдено совпадение:', match.group())
Найдено совпадение: 123
Найдено совпадение: 456

7.

Методы объекта-шаблона
re.sub(pattern, replacement, string) - Заменяет все
совпадения с регулярным выражением pattern в
строке string на replacement.
re.split(pattern, string) - Разделяет строку string на подстроки,
используя регулярное выражение pattern в качестве
разделителя. Возвращает список подстрок.
import re
import re
pattern = r'\d+' # Находит все последовательности цифр
string = 'There are 123 apples and 456 bananas'
replacement = 'X'
new_string = re.sub(pattern, replacement, string)
print('Новая строка:', new_string)
pattern = r'\s+' # Разделитель - один или более пробелов
string = 'apple orange banana'
words = re.split(pattern, string)
print('Разделенные слова:', words)
Разделенные слова: ['apple', 'orange', 'banana']
Новая строка: There are X apples and X bananas

8.

Методы объекта-шаблона
re.compile(pattern) - Компилирует регулярное
выражение pattern в объект регулярного
выражения. Этот объект можно повторно
использовать для выполнения поиска или замены.
import re
pattern = re.compile(r'\d+')
# Поиск
последовательностей цифр
string = 'There are 123 apples and 456 bananas'
matches = pattern.findall(string)
print('Найденные совпадения:', matches)
Найденные совпадения: ['123', '456']
всех
Методы объекта совпадения (MatchObject):
group(): Возвращает строку, соответствующую совпадению.
start(): Возвращает начальную позицию совпадения в
исходной строке.
end(): Возвращает конечную позицию совпадения в исходной
строке.
span(): Возвращает кортеж с начальной и конечной
позициями совпадения.
import re
Совпадение найдено: apple
Начальная позиция: 10
Конечная позиция: 15
Позиции: (10, 15)
pattern = r'apple'
string = 'I have an apple and a banana'
match = re.search(pattern, string)
if match:
print('Совпадение найдено:', match.group())
print('Начальная позиция:', match.start())
print('Конечная позиция:', match.end())
print('Позиции:', match.span())

9.

Самостоятельные задания
1.
Напишите регулярное выражение, которое найдет все слова в предложении. Пример: "Это пример
предложения с несколькими словами."
2. Напишите регулярное выражение для поиска всех доменных имен в списке адресов электронной
почты. Пример: "[email protected], [email protected], [email protected]"
3. Напишите регулярное выражение для проверки того, что строка содержит только буквы латинского
алфавита (все символы должны быть буквами).
4. Напишите регулярное выражение для поиска всех телефонных номеров в формате (XXX) XXX-XXXX.
5. Напишите регулярное выражение, которое заменит все даты в формате DD/MM/YYYY на формат
MM/DD/YYYY.
6. Напишите регулярное выражение для поиска всех HTML-тегов в тексте.
7. Напишите регулярное выражение для извлечения всех хэштегов из сообщения в социальной сети
(начинаются с символа #).
8. Напишите регулярное выражение для поиска всех слов, начинающихся с большой буквы.
9. Напишите регулярное выражение для поиска всех IP-адресов в формате IPv4.
10. Напишите регулярное выражение для поиска всех URL в тексте.
English     Русский Rules