Oder alternativ dazu der reguläre Ausdruck mit re.split():
Code: Alles auswählen
>>> s = "[aa,bb, cc,\ndd,\tee]"
>>> re.split(r",\s*", s[1:-1])
['aa', 'bb', 'cc', 'dd', 'ee']
\s = (White-)Space, d. h. neben Leerzeichen auch Tabs (\t) und Zeilentrenner (Newline, \n)
* = beliebig viele Vorkommen, wobei auch kein Vorkommen zählt
Man sagst Python somit: "Trenne an jedem Komma gefolgt von einer beliebigen Anzahl an Whitespace"
Das funktioniert grob wie das Beispiel von noisefloor, würde aber Leerraum stehen lassen, der NICHT direkt auf ein Komma folgt.
Das hier wäre übrigens das vollwertige Regex-Äquivalent zum Code von noisefloor:
Code: Alles auswählen
>>> re.findall(r"(\S+?),\s*", s[1:-1])
['aa', 'bb', 'cc', 'dd']
Unbedingt lesbarer ist das natürlich nicht. Man muss auch bei der Gruppierung aufpassen, damit re.findall() wie gewünscht funktioniert. Dazu die Doku von re.findall():
The result depends on the number of capturing groups in the pattern. If there are no groups, return a list of strings matching the whole pattern. If there is exactly one group, return a list of strings matching that group. If multiple groups are present, return a list of tuples of strings matching the groups. Non-capturing groups do not affect the form of the result.
\S ist das Gegenteil von \s, somit trifft das auf alles zu, was KEIN Whitespace ist. Das Plus heißt mindestens ein Vorkommen (hier also mindestens ein Zeichen druckbarer Text). In Verbindung mit dem Fragezeichen geht die Engine in den non-greedy Modus, damit das Komma (welches ja auch non-Whitespace ist) nicht Teil des Treffers wird.
Naja, es funktioniert, aber ist sicherlich nicht für jeden die ideale Lösung, sag ich mal.
