Регулярные выражения (regex) — это мощные инструменты для сопоставления с образцом и манипулирования текстом. Одной из важных особенностей регулярных выражений является просмотр назад, который позволяет вам указывать шаблоны, которые должны предшествовать основному шаблону, который вы пытаетесь сопоставить. В этой статье мы рассмотрим различные методы и приведем примеры кода, которые помогут вам понять и использовать потенциал поиска регулярных выражений.
- Позитивный просмотр назад:
Позитивный просмотр назад обозначается синтаксисом(?<=...). Он утверждает, что данный шаблон должен появиться непосредственно перед основным шаблоном. Вот пример:
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!предшествует фраза «Привет,».
- Негативный просмотр.
Негативный просмотр назад обозначается синтаксисом(?<!...). Он утверждает, что данный шаблон не должен появляться непосредственно перед основным шаблоном. Вот пример:
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”.
- Просмотр переменной длины.
В некоторых случаях вам может потребоваться сопоставить шаблоны с переменной длиной в просмотре назад. Однако большинству механизмов регулярных выражений требуется просмотр назад фиксированной длины. Один из способов преодолеть это ограничение — использовать технику чередования. Вот пример:
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:» перед основным шаблоном.
- Просмотр назад с помощью кванторов.
Вы можете комбинировать просмотр назад с кванторами, чтобы сопоставить несколько вхождений шаблона. Вот пример:
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 ))гарантирует, что основной шаблон соответствует серии чисел, которым предшествует фраза «числа есть».
Просмотр регулярных выражений – это мощный инструмент, расширяющий возможности регулярных выражений. Используя положительные и отрицательные запросы анализа, запросы просмотра переменной длины и запросы просмотра с кванторами, вы можете выполнять расширенные задачи сопоставления с образцом и манипуляции с текстом. Понимание и использование этой функции улучшит ваши навыки работы с регулярными выражениями и поможет вам решать сложные сценарии сопоставления.
Не забывайте экспериментировать с различными шаблонами и тщательно их тестировать, чтобы получить точные результаты. Функция просмотра регулярных выражений открывает целый мир возможностей для точного сопоставления с образцом при программировании и обработке текста.