Регулярное выражение 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 восьмеричным цифрам, он не будет интерпретироваться как групповое совпадение, но как символ с восьмеричное значение. Внутри '['
и ']'
класса символов все числовые экраны рассматриваются как символы.
Ваш пример в основном тот же, что и в документах.