2016-04-19 13 views
-4

Was ist die genaue Definition der Gruppe (0) in re.search?Python-Gruppe (0) Bedeutung

Manchmal kann die Suche komplex werden und ich würde gerne wissen, was ist der vermutete Wert der Gruppe (0) per Definition?

Nur um ein Beispiel zu geben, wo die Verwirrung kommt, betrachten Sie diese Übereinstimmung. Das Druckergebnis ist nur def. In diesem Fall hat die Gruppe (0) nicht das gesamte Match zurückgegeben.

m = re.search('(?<=abc)def', 'abcdef') 
>>> m.group(0) 
def 
+0

Es ist ein Übereinstimmungswert. –

+0

'abc' ist nicht Teil des Spiels. – user2357112

+2

Wenn Sie 'ABC' wollten, warum ist es in einem Lookbehind? – jonrsharpe

Antwort

2

match_object.group (0) sagt, dass der ganze Teil von match_object ausgewählt ist.

Zusätzlich kann Gruppe (0) durch Vergleich mit Gruppe (1), Gruppe (2), Gruppe (3), ..., Gruppe (n) erklärt werden. Gruppe (0) sucht den gesamten Übereinstimmungsausdruck. Um dann mehr übereinstimmende Orte zu bestimmen, werden Paranthesen verwendet: Gruppe (1) bedeutet, dass das erste Paar der Paarung den übereinstimmenden Ausdruck 1 findet, Gruppe (2) sagt, dass das zweite Paar der nächsten Paarung den Übereinstimmungsausdruck 2 findet und so weiter. In jedem Fall bestimmt die öffnende Klammer das nächste Paranthesepaar, indem sie die am weitesten schließende Klammer verwendet, um ein Paranthesepaar zu bilden. Das klingt wahrscheinlich verwirrend, deshalb gibt es unten ein Beispiel.

Aber Sie müssen unterscheiden zwischen der Syntax der Paranthese von '(? < = abc)'. Diese Paranthese hat eine andere syntaktische Bedeutung, nämlich das zu lokalisieren, was durch '? < = '. Dein Hauptproblem ist also, dass du nicht weißt was? < = 'tut. Dies ist ein sogenannter Look-Behind, der bedeutet, dass er dem Teil hinter dem Ausdruck entspricht, den er begrenzt.

Im folgenden Beispiel ist 'abc' an den Look-Behind gebunden.

Keine Paranthese wird benötigt, um die Match-Gruppe 0 zu bilden, da sie das ganze Match-Objekt trotzdem findet.

Die Halterung Öffnung vor dem Buchstaben ‚d‘ nimmt die letzte schließende Klammer vor dem Buchstaben ‚F‘ Gruppe 1

Die Klammern passend zu bilden, die passenden definieren um die Buchstaben ‚e‘ sind Gruppe 2.

import re 

m = re.search('(?<=abc)(d(e))f', 'abcdef') 

print(m.group(0)) 
print(m.group(1)) 
print(m.group(2)) 

Diese Drucke:

def de e

2

group(0) gibt den vollständigen String durch die regex abgestimmt. Es ist nur, dass abc nicht Teil des Spiels ist. (?<=abc) stimmt nicht überein abc - es entspricht eine beliebige Position in der Zeichenfolge, die unmittelbar von abc vorangestellt wird.