Что такое регулярные выражения в Python и как их использовать?
Введение
Регулярные выражения — мощный инструмент для работы с текстовыми данными, позволяющий производить сложные операции по их анализу и обработке. Применение регулярных выражений в Python возможно благодаря встроенной библиотеке re
. В этой статье мы рассмотрим, что такое регулярные выражения, основные понятия и синтаксис, а также примеры использования для реальных задач.
Основные понятия регулярных выражений
Что такое регулярное выражение?
Регулярное выражение (regex) — это шаблон, который используется для поиска и манипуляции подстрок в тексте. Оно позволяет определить шаблоны для поиска, замены или извлечения данных из строк.
Синтаксис регулярных выражений
Регулярные выражения состоят из специальных символов, которые имеют определенное значение:
.
— любой одиночный символ*
— предыдущее выражение повторяется 0 и более раз+
— предыдущее выражение повторяется 1 и более раз?
— предыдущее выражение повторяется 0 или 1 раз^
— начало строки$
— конец строки
import re
pattern = r'^hello.*world$'
text = 'hello, beautiful world'
result = re.match(pattern, text) # матч будет успешным
Классы символов
Классы символов позволяют задавать наборы символов, которые могут подходить под один элемент шаблона:
[a-z]
— любой символ от ‘a’ до ‘z’[0-9]
— любая цифра от 0 до 9\d
— любая цифра (эквивалентно[0-9]
)\D
— любой нецифровой символ
import re
pattern = r'\d{3}-\d{2}-\d{4}'
text = '123-45-6789'
result = re.match(pattern, text) # матч будет успешным
Импортируем нужные библиотеки
Библиотека re
— основная библиотека Python для работы с регулярными выражениями. Подключить её можно простым импортом:
import re
Основные функции модуля re
re.match()
Функция match
ищет совпадение только в начале строки.
import re
def example_match(pattern: str, text: str) -> None:
result = re.match(pattern, text)
if result:
print(f"Matched: {result.group()}")
else:
print("No match")
example_match(r'hello', 'hello, world')
re.search()
Функция search
ищет совпадение по всей строке.
import re
def example_search(pattern: str, text: str) -> None:
result = re.search(pattern, text)
if result:
print(f"Found: {result.group()}")
else:
print("Not found")
example_search(r'world', 'hello, world')
re.findall()
Функция findall
возвращает список всех найденных совпадений.
import re
def example_findall(pattern: str, text: str) -> list[str]:
return re.findall(pattern, text)
emails = example_findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', 'Contact me at email@example.com or admin@example.net')
print(emails)
re.sub()
Функция sub
заменяет все совпадающие подстроки другой строкой.
import re
def example_sub(pattern: str, repl: str, text: str) -> str:
return re.sub(pattern, repl, text)
censored = example_sub(r'\b\d+\b', '[NUMBER]', 'My phone number is 12345')
print(censored)
re.split()
Функция split
разбивает строку по заданному шаблону.
import re
def example_split(pattern: str, text: str) -> list[str]:
return re.split(pattern, text)
words = example_split(r'\W+', 'One, two, three; go!')
print(words)
Примеры использования регулярных выражений
Поиск email-адресов
import re
def find_emails(text: str) -> list[str]:
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
return re.findall(pattern, text)
emails = find_emails('Emails: first@example.com, second@sample.net')
print(emails)
Валидация телефонного номера
import re
def validate_phone(phone: str) -> bool:
pattern = r'^\+?[1-9]\d{1,14}$'
return bool(re.match(pattern, phone))
print(validate_phone('+1234567890'))
print(validate_phone('123-45-6789'))
Извлечение данных из строк
import re
def extract_hashtags(text: str) -> list[str]:
pattern = r'#(\w+)'
return re.findall(pattern, text)
hashtags = extract_hashtags('Use #Python and #regex for text processing')
print(hashtags)
Типизация данных в регулярных выражениях
Использование типизации данных в Python значительно упрощает разработку, делая код более предсказуемым и удобным для поддержки. В примерах выше мы уже видели использование аннотаций типов. Например, функции, которые возвращают список строк:
def find_emails(text: str) -> list[str]:
# ...
pass
Подводя итоги
Регулярные выражения — чрезвычайно полезный инструмент для работы с текстом в Python. С их помощью можно легко искать и заменять подстроки, валидировать данные и извлекать информацию. Они широко применяются в веб-программировании, анализе данных и других областях.
Заключение
Для дальнейшего изучения регулярных выражений в Python рекомендуется ознакомиться с официальной документацией и ресурсами, такими как Python документация по re
и Regular-Expressions.info.