2016-06-28 3 views
-3

При записи Boiler и 1, указанных ниже, они затем указываются как \ 1 и \ 2. Мне потребовалось некоторое время, чтобы понять, почему это не работает, поскольку я ожидал, что группа захвата будет нулевой. Почему группа захвата не нулевая индексация, в отличие от почти всего в Python?Почему Python re.sub не индексируется без нуля?

string = "BoilerRoom_Boiler_Booster_On" 
re.sub('(Boiler)_(\d)', r'\1-\2', string) 

Out[21]: 
'BoilerRoom_Boiler-1_Booster_On' 
+0

Дублированный вопрос не возник в моем поиске, поскольку я явно искал python. Я не должен был знать, что это применимо ко всем языковым группам захвата регулярных выражений. – josh

ответ

2

Потому что, как говорят the docs:

Группы нумеруются, начиная с 0. Группа 0 всегда присутствует; это вся RE

Насколько почему они решили сделать это так, мое предположение, что это Unix инструменты старше re модуля Питона уже сделали это таким образом.

+2

Просто уточнить - документация (imo) немного неясна. Группа 0 - это все ** совпадение ** RE, а не RE. – ClasG

1

Это нулевая индексация, так как group 0 представляет всю группу матчей.

Смежные вопросы