Python Tutorials

Регулярные выражения в Python: Полное руководство

Spread the love

Освоение регулярных выражений в Python

Регулярные выражения (regex или regexp) — мощные инструменты для поиска шаблонов в строках. Модуль re в Python предоставляет всеобъемлющий интерфейс для работы с ними, позволяя выполнять сложные манипуляции с текстом и извлечение данных. Это руководство проведет вас через основные функции и концепции, предоставив вам возможность эффективно использовать возможности регулярных выражений в ваших проектах Python.

Оглавление

  1. re.match(): Сопоставление с начала строки
  2. re.search(): Поиск первого совпадения
  3. re.compile(): Оптимизация производительности
  4. Флаги: изменение поведения сопоставления
  5. Наборы символов: определение допустимых символов
  6. Поиск и замена с помощью re.sub()
  7. re.findall(): Извлечение всех совпадений
  8. re.finditer(): Итерация по совпадениям
  9. re.split(): Разбиение строк по шаблону
  10. Основные шаблоны: якоря, классы символов
  11. Повторение: квантификаторы и жадное/нежадное сопоставление
  12. Специальные последовательности: цифры, пробельные символы, символы слова
  13. re.escape(): Обработка специальных символов
  14. Группы захвата и метод group()

1. re.match(): Сопоставление с начала строки

Функция re.match() пытается сопоставить шаблон только в самом начале строки. Она возвращает объект совпадения, если сопоставление успешно, в противном случае — None.


import re

text = "Hello World"
pattern = "Hello"
match = re.match(pattern, text)

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

re.search() просматривает всю строку на наличие первого вхождения шаблона. В отличие от re.match(), он не требует, чтобы совпадение находилось в начале.


import re

text = "Hello World"
pattern = "World"
match = re.search(pattern, text)

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

3. re.compile(): Оптимизация производительности

Для повышения производительности, особенно при многократном использовании одного и того же шаблона, скомпилируйте его с помощью re.compile(). Это создает многократно используемый объект шаблона.


import re

compiled_pattern = re.compile(r"d+")  # Компиляция шаблона
text1 = "There are 123 apples"
text2 = "And 456 oranges"

match1 = compiled_pattern.search(text1)
match2 = compiled_pattern.search(text2)

print(match1.group(0))  # Вывод: 123
print(match2.group(0))  # Вывод: 456

4. Флаги: изменение поведения сопоставления

Флаги изменяют процесс сопоставления. re.IGNORECASE выполняет сопоставление без учета регистра, а re.MULTILINE рассматривает каждую строку как отдельную строку для якорей ^ и $.


import re

text = "Hello world"
pattern = re.compile("hello", re.IGNORECASE)
match = pattern.search(text)
print(match.group(0))  # Вывод: Hello

5. Наборы символов: определение допустимых символов

Наборы символов ([]) указывают допустимые символы. Например, [a-z] соответствует строчным буквам.


import re

text = "abc123XYZ"
pattern = re.compile("[a-z]+")
match = pattern.search(text)
print(match.group(0))  # Вывод: abc

6. Поиск и замена с помощью re.sub()

re.sub() заменяет вхождения шаблона на строку замены.


import re

text = "Hello World"
new_text = re.sub("World", "Python", text)
print(new_text)  # Вывод: Hello Python

7. re.findall(): Извлечение всех совпадений

re.findall() возвращает список всех непересекающихся совпадений.


import re

text = "123 abc 456 def"
numbers = re.findall(r"d+", text)
print(numbers)  # Вывод: ['123', '456']

8. re.finditer(): Итерация по совпадениям

re.finditer() возвращает итератор, который дает объекты совпадений. Более эффективное использование памяти для большого количества совпадений в больших строках.


import re

text = "123 abc 456 def"
for match in re.finditer(r"d+", text):
    print(match.group(0))  # Вывод: 123, 456 (на отдельных строках)

9. re.split(): Разбиение строк по шаблону

re.split() разделяет строку на основе шаблона.


import re

text = "apple,banana,cherry"
fruits = re.split(r",", text)
print(fruits)  # Вывод: ['apple', 'banana', 'cherry']

10. Основные шаблоны: якоря, классы символов

  • .: Соответствует любому символу, кроме символа новой строки.
  • ^: Соответствует началу строки.
  • $: Соответствует концу строки.
  • []: Соответствует набору символов (например, [abc], [a-z]).
  • [^...]: Соответствует любому символу, *не* входящему в набор (инвертированный набор символов).

11. Повторение: квантификаторы и жадное/нежадное сопоставление

  • *: Ноль или более вхождений.
  • +: Одно или более вхождений.
  • ?: Ноль или одно вхождение.
  • {m}: Ровно m вхождений.
  • {m,n}: От m до n вхождений.
  • *?, +?, ??, {m,n}?: Нежадные версии (соответствуют кратчайшей возможной строке).

12. Специальные последовательности: цифры, пробельные символы, символы слова

  • d: Соответствует любой цифре (0-9).
  • D: Соответствует любому символу, не являющемуся цифрой.
  • s: Соответствует любому пробельному символу (пробел, табуляция, символ новой строки).
  • S: Соответствует любому символу, не являющемуся пробельным.
  • w: Соответствует любому буквенно-цифровому символу (буквы, цифры, подчеркивание).
  • W: Соответствует любому символу, не являющемуся буквенно-цифровым.

13. re.escape(): Обработка специальных символов

re.escape() экранирует специальные символы в строке, позволяя использовать её как литеральный шаблон без непреднамеренных интерпретаций regex.

14. Группы захвата и метод group()

Скобки () создают группы захвата. Метод group() обращается к захваченным подстрокам.


import re

text = "My phone number is 123-456-7890"
match = re.search(r"(d{3})-(d{3})-(d{4})", text)
if match:
    area_code = match.group(1)
    prefix = match.group(2)
    line_number = match.group(3)
    print(f"Код региона: {area_code}, Префикс: {prefix}, Номер линии: {line_number}")

Это руководство дает прочную основу по работе с модулем re в Python. Дальнейшее изучение расширенных методов значительно улучшит ваши возможности обработки строк. Не забудьте обратиться к официальной документации Python для получения полной справки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *