Frage Die Methode groups () in regulären Ausdrücken in Python


Ich lerne über Regex in Python und ich habe Probleme, die Funktion zu verstehen groups().

>>> m = re.match("([abc])+", "abc")

Hier habe ich die Klasse [abc] definiert, die, wie ich weiß, jedes der Zeichen a bis c bedeutet. Es ist innerhalb einer Gruppe definiert und das + Zeichen bedeutet, dass wir mindestens eine dieser Gruppen haben wollen. Also führe ich die folgende Zeile aus und das Ergebnis ist verständlich:

>>> m.group()
'abc'
>>> m.group(0)
'abc'

Ich verstehe warum das passiert. Der Index der Hauptgruppe ist 0 und 'abc' entspricht der Klasse, die wir definiert haben. So weit so gut, aber ich verstehe nicht, warum die folgenden Zeilen so ausgeführt werden, wie sie es tun:

>>> m.group(1)
'c'
>>> m.groups()
('c',)

Was ist Gruppe (1), ich habe hier nur eine Gruppe definiert und warum die Gruppenfunktion nur das Zeichen "c" hat? Soll es nicht ein Tupel mit allen Gruppen zurückgeben? Ich nehme an, es würde zumindest 'abc' enthalten.


6
2017-11-25 20:14


Ursprung


Antworten:


Zum re Details konsultieren Dokumente. In Ihrem Fall:

group(0) steht für alle übereinstimmenden Saiten abcDas sind 3 Gruppen a, b und c

group(i) steht für die Gruppe und zitiert die Dokumentation

Wenn eine Gruppe mehrere Male übereinstimmt, ist nur die letzte Übereinstimmung verfügbar

daher group(1) steht für das letzte Spiel, c

Ihre + Wird als Gruppenwiederholung interpretiert, wenn Sie wiederholen möchten [abc] innerhalb der Gruppe, bewege dich + in Klammern:

>>> re.match("([abc])", "abc").groups()
('a',)
>>> re.match("([abc]+)", "abc").groups()
('abc',)

8
2017-11-25 20:23



Von dem Dokumente:

Wenn eine Gruppe mehrere Male übereinstimmt, ist nur die letzte Übereinstimmung verfügbar:

>>> m = re.match(r"(..)+", "a1b2c3")  # Matches 3 times.
>>> m.group(1)                        # Returns only the last match.
'c3'

Deine Gruppe kann immer nur einem Charakter entsprechen c ist das letzte Spiel.

Sie erwähnen, dass Sie erwarten würden, zumindest zu sehen 'abc' - Wenn du möchtest, dass deine Gruppe mehrere Charaktere zusammenbringt, lege die + in der Gruppe:

>>> m = re.match("([abc]+)", "abc")

1
2017-11-25 20:22