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.