Регулярное выражение python "\ 1"

Может ли кто-нибудь сказать мне, что означает "\ 1" в следующем регулярном выражении в Python?

re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')

Спасибо!

Ответ 1

\1 эквивалентно re.search(...).group(1), первое выражение с округленными скобками внутри регулярного выражения.

Это также забавный факт, который является частью причины, по которой регулярные выражения значительно медленнее на Python и других языках программирования, чем которые должны соответствовать теории CS.

Ответ 2

Первая \1 означает первую группу - то есть первое заключенное в скобки выражение (\b[a-z]+)

Из docs \number

"Соответствует содержимому группы с тем же номером. Группы нумеруются начиная с 1. Например, (. +)\1 соответствует '' или '55 55 ', но не' thethe '(обратите внимание на пространство после группы)"

В вашем случае он ищет повторяющееся "слово" (ну, блок строчных букв).

Второй \1 является заменой для использования в случае совпадения, поэтому повторное слово будет заменено одним словом.

Ответ 3

\1 является обратной ссылкой. Он соответствует, что когда-либо соответствовало вашим скобкам, в этом случае the

В основном вы говорите

  • сопоставить пустую строку в начале слова (\ b)
  • соответствие алфавитным символам из a-z, один или несколько раз
  • снова повторите выражение в скобках

cat in ('' 'the') 'the' hat

Ответ 4

Из python docs для модуля re:

\number

Соответствует содержимому группы с тем же номером. Группы пронумерованный начиная с 1. Например, (.+) \1 соответствует 'the the' или '55 55', но не 'thethe' (обратите внимание на пробел после группы). Эта специальная последовательность может использоваться только для соответствия одной из первых 99 групп. Если первая цифра числа равна 0 или число равно 3 восьмеричным цифрам, он не будет интерпретироваться как групповое совпадение, но как символ с восьмеричное значение. Внутри '[' и ']' класса символов все числовые экраны рассматриваются как символы.

Ваш пример в основном тот же, что и в документах.