Seite 1 von 1

strings "spezieller" teilen

Verfasst: Donnerstag 28. Mai 2009, 20:32
von Francesco
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?

Verfasst: Donnerstag 28. Mai 2009, 20:44
von Leonidas
Hallo Francesco, willkommen zurück,

Du könntest den CSV-Parser verwenden und als Separator einfach das Leerzeichen angeben :)

Verfasst: Donnerstag 28. Mai 2009, 20:49
von Francesco
Leonidas hat geschrieben:Hallo Francesco, willkommen zurück,

Du könntest den CSV-Parser verwenden und als Separator einfach das Leerzeichen angeben :)
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.

Verfasst: Donnerstag 28. Mai 2009, 20:54
von Leonidas
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 wollte auch gerade einwenden: ``re.split`` existiert zwar, aber wie willst du feststellen ob du in einem gequoteten Bereich bist?

Verfasst: Donnerstag 28. Mai 2009, 21:02
von Francesco
Leonidas hat geschrieben:
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 wollte auch gerade einwenden: ``re.split`` existiert zwar, aber wie willst du feststellen ob du in einem gequoteten Bereich bist?
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).

Verfasst: Freitag 29. Mai 2009, 15:04
von hendrikS
Ich hatte mal kurz so was probiert:

Code: Alles auswählen

string= 'mystring "this is a line" test'
print map(str.strip,string.split('"'))
Sollte es vielleicht auch tun?

Verfasst: Freitag 29. Mai 2009, 15:41
von derdon
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']

Verfasst: Samstag 30. Mai 2009, 11:52
von birkenfeld
Genau für so etwas wurde shlex.split() erfunden.

Verfasst: Samstag 30. Mai 2009, 12:55
von sma
Ich würde es so machen:

Code: Alles auswählen

import re
s = 'mystring "this is a line" test' 
print re.findall(r'"[^"]*"|\S+', s)
Stefan

PS: sollen die " noch weg, ginge dies:

Code: Alles auswählen

print [s.strip('"') for s in re.findall(r'"[^"]*"|\S+', s)]

Verfasst: Samstag 30. Mai 2009, 16:34
von Francesco
sma hat geschrieben:Ich würde es so machen:

Code: Alles auswählen

import re
s = 'mystring "this is a line" test' 
print re.findall(r'"[^"]*"|\S+', s)
Stefan

PS: sollen die " noch weg, ginge dies:

Code: Alles auswählen

print [s.strip('"') for s in re.findall(r'"[^"]*"|\S+', s)]
Dankeschön! ;)