2016-06-28 11 views
-3

Beim Erfassen von Boiler und 1, die unten gezeigt werden, werden sie dann als \ 1 und \ 2 referenziert. Es dauerte eine Weile, bis ich herausgefunden hatte, warum dies nicht funktionierte, da ich davon ausgegangen war, dass die Erfassungsgruppe nicht indexiert war. Warum ist die Capture-Gruppe anders als fast alles in Python nicht auf Null indexiert?Warum wird Python re-Capture nicht null indiziert?

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

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

Die doppelte Frage ist bei meiner Suche nicht aufgetreten, da ich explizit nach Python gesucht habe. Ich sollte nicht wissen, dass es für alle Sprach-Regex-Erfassungsgruppen gelten würde. – josh

Antwort

2

Denn wie the docs sagen:

Gruppen mit 0 Gruppe 0 beginnend gezählt sind immer vorhanden; es ist die ganze RE

Was warum sie es so tun wollte, denke ich es, dass Unix-Tools älter als re Moduls Python schon, dass es so war.

+2

Nur um zu verdeutlichen - die Dokumentation ist (imo) etwas unklar. Gruppe 0 ist die ganze ** Übereinstimmung ** der RE, nicht die RE selbst. – ClasG

1

Es ist null indiziert, da group 0 die gesamte Match-Gruppe darstellt.

Verwandte Themen