2017-04-04 5 views
1

Python scheint ein ziemlich überraschendes Verhalten zu haben, wenn Gruppen in Python passend:Warum werden Regex-Gruppen in Python nicht wie erwartet abgeglichen?

>>> re.split("\+|-", "1+2") 
['1', '2'] 

>>> re.split("(\+|-)", "1+2") 
['1', '+', '2'] 

ich keine befriedigende Erklärung nicht gefunden habe, warum, so wird abgestimmt einen einzigen Ausdruck Gruppierung würde es verhindern, was ist das Problem hier?

Laut regex101 gibt es absolut keinen Unterschied bei der Anpassung, obwohl mehr Schritte erforderlich sind. regex test

+1

Siehe http://stackoverflow.com/questions/2136556/in -python-how-do-i-split-a-string-und-behalten-die-Trennzeichen. Und ['re.split' docs] (https://docs.python.org/2/library/re.html#re.split): * Wenn im Muster Fangklammern verwendet werden, dann der Text aller Gruppen in der Muster werden auch als Teil der resultierenden Liste zurückgegeben. * –

Antwort

2

Wenn Sie die () hinzufügen, bitten Sie Python, diesen Wert in der Teilung zu "erfassen".

Wie, wenn Sie tun sollten:

>>> re.split("(a\+|-)", "1a+2") 
['1', 'a+', '2'] 

Dann wäre es ein + holen und sie in den Mittelpunkt stellen.

Was geschieht es sie alle gefangen Gruppierungen nehmen und sie in der Anordnung zwischen relevanten Positionen setzen, wie in diesem Beispiel:

>>> re.split("(a)(\+|-)", "1a+2") 
['1', 'a', '+', '2'] 
Verwandte Themen