Может ли кто-нибудь сказать мне, что означает "\ 1" в следующем регулярном выражении в Python?
re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
Спасибо!
Может ли кто-нибудь сказать мне, что означает "\ 1" в следующем регулярном выражении в Python?
re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
Спасибо!
\1
эквивалентно re.search(...).group(1)
, первое выражение с округленными скобками внутри регулярного выражения.
Это также забавный факт, который является частью причины, по которой регулярные выражения значительно медленнее на Python и других языках программирования, чем которые должны соответствовать теории CS.
Первая \1
означает первую группу - то есть первое заключенное в скобки выражение (\b[a-z]+)
Из docs \number
"Соответствует содержимому группы с тем же номером. Группы нумеруются начиная с 1. Например, (. +)\1 соответствует '' или '55 55 ', но не' thethe '(обратите внимание на пространство после группы)"
В вашем случае он ищет повторяющееся "слово" (ну, блок строчных букв).
Второй \1
является заменой для использования в случае совпадения, поэтому повторное слово будет заменено одним словом.
\1
является обратной ссылкой.
Он соответствует, что когда-либо соответствовало вашим скобкам, в этом случае the
В основном вы говорите
cat in ('' 'the') 'the' hat
\number
Соответствует содержимому группы с тем же номером. Группы пронумерованный начиная с 1. Например,
(.+) \1
соответствует'the the'
или'55 55'
, но не'thethe'
(обратите внимание на пробел после группы). Эта специальная последовательность может использоваться только для соответствия одной из первых 99 групп. Если первая цифра числа равна 0 или число равно 3 восьмеричным цифрам, он не будет интерпретироваться как групповое совпадение, но как символ с восьмеричное значение. Внутри'['
и']'
класса символов все числовые экраны рассматриваются как символы.
Ваш пример в основном тот же, что и в документах.