2016-07-06 22 views
1

Warum druckt dieser Regex ('c',) und ()? Ich dachte "([abc])+" === "([abc])([abc])([abc])..."Python Regulärer Ausdruck Gruppen

>>> import re 
>>> m = re.match("([abc])+", "abc") 
>>> print m.groups() 
('c',) 
>>> m.groups(0) 
('c',) 
>>> m = re.match("[abc]+", "abc") 
>>> m.groups() 
() 
>>> m.groups(0) 
() 
+1

'm.group() = 'abc'' (es ist m.group nicht m.groups) –

Antwort

1

Von Dokumentation über groups

Return ein Tupel alle Untergruppen des Spiels enthält, von 1 bis zu jedoch viele Gruppen im Muster sind. Das Standardargument wird für Gruppen verwendet, die nicht an der Übereinstimmung teilgenommen haben. Standardeinstellung ist Keine.

In der ersten Regex ([abc])+ ist es passender Charakter a oder b oder c sondern speichert nur das letzte Spiel

([abc])+ 
<-----> 
Matches a or b or c 
Observe carefully. Capturing groups are surrounding only the character class 
So, only one character from the matched character class can be stored in capturing group. 

Wenn Sie abc Zeichenfolge wollen in einer Erfassungsgruppe Verwendung

erfassen
([abc]+) 

Oben finden Sie eine Zeichenfolge bestehend aus a oder b oder c und speichert sie in der Erfassungsgruppe.

Im zweiten Regex [abc]+ gibt es keine einfangenden Gruppen, daher wird ein leeres Ergebnis angezeigt.

+0

aber' "([abc]) ([abc]) ([abc])" 'speichert alle drei Treffer while '([abc]) +' speichert nur die letzte Übereinstimmung. Wie merkwürdig! –

+0

@ J.Joe es ist nichts seltsam..first One ist offensichtlich..ich habe die Antwort ein wenig aktualisiert zu erklären, was passiert..sehen, wenn es hilft..Sie können fragen, ob Sie noch ein Problem haben – rock321987

+0

@ J.Joe '([abc]) ([abc]) ([abc]) 'speichert jede Übereinstimmung in einer anderen Erfassungsgruppe..aber' (abc) + 'wird jedes Mal überschrieben..so dass nur eine Übereinstimmung in der Erfassungsgruppe – rock321987

0

Wenn Sie setzen und nach der Klammer Sie ein Zeichen in einer Zeit passen, viele Male. Also stimmt es mit einem dann b dann c überein, jedesmal überschreibt das vorhergehende. Verschiebe das + nach innen ([abc] +), um eins oder mehrere zu finden.