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

Обратные ссылки похожи на переменные в Python.

Содержание

Введение в обратные ссылки на регулярные выражения Python

Обратные ссылки позволяют ссылаться на группы захвата в регулярном выражении в Python.

Ниже показан синтаксис обратной ссылки:

\N

Альтернативно вы можете использовать следующий синтаксис:

\g<N>

В этом синтаксисе N может быть 1, 2, 3 и т. д., что представляет соответствующую группу захвата.

Обратите внимание, что \g<0> относится ко всему совпадению, которое имеет то же значение, что и match.group(0).

Предположим, у вас есть строка с повторяющимся словом Python, например:

s = 'Python Python is awesome'

И вы хотите удалить повторяющееся слово (Python), чтобы результирующая строка была такой:

Python is awesome

Для этого вы можете использовать регулярное выражение с обратной ссылкой.

  • Сначала сопоставьте слово с одним или несколькими символами и одним или несколькими пробелами:
'\w+\s+'
  • Во-вторых, создайте группу захвата, содержащую только символы слова:
'(\w+)\s+'
  • В-третьих, создайте обратную ссылку, которая ссылается на первую группу захвата:
'(\w+)\s+\1'

В этом шаблоне \1 — это обратная ссылка, которая ссылается на группу захвата(\w+).

  • Наконец, замените все совпадение первой группой захвата, используя функцию sub() из модуля re:
import re

s = 'Python Python is awesome'

new_s = re.sub(r'(\w+)\s+\1', r'\1', s)

print(new_s)

Выход:

Python is awesome

Примеры обратных ссылок на регулярные выражения Python

Давайте рассмотрим несколько примеров использования обратных ссылок.

1) Использование обратных ссылок для получения текста внутри кавычек

Предположим, вы хотите получить текст в двойных кавычках:

"This is regex backreference example"

Или в одинарных кавычках:

'This is regex backreference example'

Но не подобную смесь одинарных и двойных кавычек:

'not match"

Для этого вы можете использовать следующий шаблон:

'[\'"](.*?)[\'"]'

Однако этот шаблон будет соответствовать тексту, который начинается с одинарной кавычки(‘) и заканчивается двойной кавычкой(«) или наоборот. Например:

import re

s = '"Python\'s awsome". She said'
pattern = '[\'"].*?[\'"]'

match = re.search(pattern, s)

print(match.group(0))

Он возвращает «Python’, а не «Python’s awesome»:

"Python'

Чтобы исправить это, вы можете использовать обратную ссылку:

r'([\'"]).*?\1'

Обратная ссылка \1 относится к первой группе захвата. Таким образом, если подгруппа начинается с одинарной кавычки, \1 будет соответствовать одинарной кавычке. И если подгруппа начинается с двойной кавычки, \1 будет соответствовать двойной кавычке.

Например:

import re

s = '"Python\'s awsome". She said'
pattern = r'([\'"])(.*?)\1'

match = re.search(pattern, s)
print(match.group())

Выход:

"Python's awsome"

2) Поиск слов, которые имеют хотя бы один последовательный повторяющийся символ

В следующем примере обратная ссылка используется для поиска слов, содержащих хотя бы один последовательный повторяющийся символ:

import re

words = ['apple', 'orange', 'strawberry']
pattern = r'\b\w*(\w)\1\w*\b'

results = [w for w in words if re.search(pattern, w)]

print(results)

Выход:

['apple', 'strawberry']
Похожие посты
Добавить комментарий

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