Hallo, ich habe einige Monate im Prinzip nichts mit Python gemacht. Ich habe folgendes Problem.
Wie kann ich elegant einen String teilen (nach spaces, aber NUR wenn das space nicht in Anführungszeichen ist.
Bsp
string= mystring "this is a line" test
string.split(' ') teilt mir das auf auf ['mystring', "this" "is", "a" line"... "test"
was ich möchte ist
["mystring", "this is a line", ["test"]
gibt es da einen kurzen Weg, dies zu erreichen?
strings "spezieller" teilen
Danke Leonidas. Ich wundere mich nur, ob es kein regex split gibt. Ich bildete mir ein, das ging irgendwie. Nachtrag: Nein, in diesem Fall wird das nicht funktionieren. das mit dem csv Parser ist ein guter Tip.Leonidas hat geschrieben:Hallo Francesco, willkommen zurück,
Du könntest den CSV-Parser verwenden und als Separator einfach das Leerzeichen angeben
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich wollte auch gerade einwenden: ``re.split`` existiert zwar, aber wie willst du feststellen ob du in einem gequoteten Bereich bist?Francesco hat geschrieben:Ich wundere mich nur, ob es kein regex split gibt. Ich bildete mir ein, das ging irgendwie. Nachtrag: Nein, in diesem Fall wird das nicht funktionieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ja, genau. Der Hintergrund des ganzen ist pyxfce. Aber die Frage passt hier nicht ganz herein. Ich werde einen neuen Thread in Ideen eröffnen (pyxfce Grafische Oberfläche Linux).Leonidas hat geschrieben:Ich wollte auch gerade einwenden: ``re.split`` existiert zwar, aber wie willst du feststellen ob du in einem gequoteten Bereich bist?Francesco hat geschrieben:Ich wundere mich nur, ob es kein regex split gibt. Ich bildete mir ein, das ging irgendwie. Nachtrag: Nein, in diesem Fall wird das nicht funktionieren.
Ich hatte mal kurz so was probiert:
Sollte es vielleicht auch tun?
Code: Alles auswählen
string= 'mystring "this is a line" test'
print map(str.strip,string.split('"'))
Funktioniert aber auch nur bei diesem Sonderfall. Das ist keine allgemeingültige Lösung:
Code: Alles auswählen
In [26]: string= 'mystring and a test "this is a line" test test test'
In [27]: print map(str.strip,string.split('"'))
['mystring and a test', 'this is a line', 'test test test']
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Genau für so etwas wurde shlex.split() erfunden.
Ich würde es so machen:
Stefan
PS: sollen die " noch weg, ginge dies:
Code: Alles auswählen
import re
s = 'mystring "this is a line" test'
print re.findall(r'"[^"]*"|\S+', s)
PS: sollen die " noch weg, ginge dies:
Code: Alles auswählen
print [s.strip('"') for s in re.findall(r'"[^"]*"|\S+', s)]
Dankeschön!sma hat geschrieben:Ich würde es so machen:StefanCode: Alles auswählen
import re s = 'mystring "this is a line" test' print re.findall(r'"[^"]*"|\S+', s)
PS: sollen die " noch weg, ginge dies:Code: Alles auswählen
print [s.strip('"') for s in re.findall(r'"[^"]*"|\S+', s)]