Warum gibt re.findall eine Liste von Tupeln zurück, wenn mein Muster nur eine Gruppe enthält?Python

Python-Programme
Anonymous
 Warum gibt re.findall eine Liste von Tupeln zurück, wenn mein Muster nur eine Gruppe enthält?

Post by Anonymous »

Angenommen, ich habe eine Zeichenfolge s, die Buchstaben und zwei Trennzeichen 1 und 2 enthält. Ich möchte die Zeichenfolge folgendermaßen aufteilen:
  • Wenn eine Teilzeichenfolge t zwischen 1 und 2 liegt, geben Sie t zurück
  • Andernfalls geben Sie jedes Zeichen zurück
Wenn also s = 'ab1cd2efg1hij2k', ist die erwartete Ausgabe ['a', 'b', 'cd', 'e', 'f', 'g', 'hij', 'k'].

Ich habe versucht, reguläre Ausdrücke zu verwenden:

Code: Select all

import re
s = 'ab1cd2efg1hij2k'
re.findall( r'(1([a-z]+)2|[a-z])', s )

[('a', ''),
('b', ''),
('1cd2', 'cd'),
('e', ''),
('f', ''),
('g', ''),
('1hij2', 'hij'),
('k', '')]
Von dort aus kann ich [ x[x[-1]!=''] for x in re.findall( r'(1([a-z]+)2|[a-z])', s ) ] tun, um meine Antwort zu erhalten, aber ich verstehe die Ausgabe immer noch nicht. In der Dokumentation heißt es, dass findall eine Liste von Tupeln zurückgibt, wenn das Muster mehr als eine Gruppe hat. Allerdings enthält mein Muster nur eine Gruppe. Jede Erklärung ist willkommen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post