Освоение функции просмотра регулярных выражений: подробное руководство по расширенному сопоставлению с образцом

Регулярные выражения (regex) — это мощные инструменты для сопоставления с образцом и манипулирования текстом. Одной из важных особенностей регулярных выражений является просмотр назад, который позволяет вам указывать шаблоны, которые должны предшествовать основному шаблону, который вы пытаетесь сопоставить. В этой статье мы рассмотрим различные методы и приведем примеры кода, которые помогут вам понять и использовать потенциал поиска регулярных выражений.

  1. Позитивный просмотр назад:
    Позитивный просмотр назад обозначается синтаксисом (?<=...). Он утверждает, что данный шаблон должен появиться непосредственно перед основным шаблоном. Вот пример:
import re
text = "Hello, World! Today is a beautiful day."
pattern = r'(?<=Hello, )\w+'
matches = re.findall(pattern, text)
print(matches)  # Output: ['World!']

В этом примере положительный просмотр (?<=Hello, )гарантирует, что слову World!предшествует фраза «Привет,».

  1. Негативный просмотр.
    Негативный просмотр назад обозначается синтаксисом (?<!...). Он утверждает, что данный шаблон не должен появляться непосредственно перед основным шаблоном. Вот пример:
import re
text = "I have an apple and a banana."
pattern = r'(?<!an )\b\w+\b'
matches = re.findall(pattern, text)
print(matches)  # Output: ['I', 'have', 'apple', 'and', 'a', 'banana']

В этом примере отрицательный просмотр (?<!an )гарантирует, что перед словами не будет стоять фраза “an”.

  1. Просмотр переменной длины.
    В некоторых случаях вам может потребоваться сопоставить шаблоны с переменной длиной в просмотре назад. Однако большинству механизмов регулярных выражений требуется просмотр назад фиксированной длины. Один из способов преодолеть это ограничение — использовать технику чередования. Вот пример:
import re
text = "The password is secret123."
pattern = r'(?<=(password is |password: ))\w+'
matches = re.findall(pattern, text)
print(matches)  # Output: ['secret123']

В этом примере внешний вид переменной длины (?<=(password is |password: ))соответствует либо «password is», либо «password:» перед основным шаблоном.

  1. Просмотр назад с помощью кванторов.
    Вы можете комбинировать просмотр назад с кванторами, чтобы сопоставить несколько вхождений шаблона. Вот пример:
import re
text = "The numbers are 123, 456, and 789."
pattern = r'(?<=(numbers are ))\d+(, )?\d+(, )?\d+'
matches = re.findall(pattern, text)
print(matches)  # Output: ['123, 456, and 789']

В этом примере просмотр назад (?<=(numbers are ))гарантирует, что основной шаблон соответствует серии чисел, которым предшествует фраза «числа есть».

Просмотр регулярных выражений – это мощный инструмент, расширяющий возможности регулярных выражений. Используя положительные и отрицательные запросы анализа, запросы просмотра переменной длины и запросы просмотра с кванторами, вы можете выполнять расширенные задачи сопоставления с образцом и манипуляции с текстом. Понимание и использование этой функции улучшит ваши навыки работы с регулярными выражениями и поможет вам решать сложные сценарии сопоставления.

Не забывайте экспериментировать с различными шаблонами и тщательно их тестировать, чтобы получить точные результаты. Функция просмотра регулярных выражений открывает целый мир возможностей для точного сопоставления с образцом при программировании и обработке текста.