Seite 1 von 1
String teilen und ausgeben
Verfasst: Mittwoch 7. April 2010, 21:22
von sttrader
Hallo an alle
Ich habe mal eine warscheinlich einfache Frage auf die ich aber keine lösung
finde.
Ich möchte den String print "Hallo Welt" so Spliten
das ich danach nur den inhalt "Hallo Welt"
printen kann ?
Wäre über eure Hilfe sehr dankbar
MFG
Verfasst: Mittwoch 7. April 2010, 21:31
von gkuhl
Hallo,
versuch's mal mit der
String-Split-Methode.
Grüße
Gerrit
Verfasst: Mittwoch 7. April 2010, 22:39
von BlackJack
Das `shlex`-Modul könnte auch interessant sein.
Verfasst: Donnerstag 8. April 2010, 09:30
von sma
Meinst du so was?
Code: Alles auswählen
import re
s = 'print "Hallo Welt"'
print([a or b for a, b in re.findall(r'"([^"]*)"|([^"]+)', s)])
Stefan
Verfasst: Donnerstag 8. April 2010, 10:10
von Rebecca
Urgs, warum Regex wenn doch shlex schon genannt wurde?
Verfasst: Donnerstag 8. April 2010, 10:51
von sma
Weil ich immer Lösungen mit REs poste und in diesem Fall den Einzeiler auch einfacher finde, denn er funktioniert in jeder Sprache, nicht nur in Python, wo es zufällig ein shlex-Modul gibt.
Stefan
Verfasst: Donnerstag 8. April 2010, 18:03
von Mad-Marty
sma hat geschrieben:Weil ich immer Lösungen mit REs poste und in diesem Fall den Einzeiler auch einfacher finde, denn er funktioniert in jeder Sprache, nicht nur in Python, wo es zufällig ein shlex-Modul gibt.
Stefan
Genau, prima lösung für eine
Anfängerfrage für split ...

Verfasst: Donnerstag 8. April 2010, 18:43
von Defnull
Es gibt gute Gründe, shlex statt re zu verwenden:
Code: Alles auswählen
>>> import re, shlex
>>> s = 'print "Hello \\"World\\""'
>>> [a or b for a, b in re.findall(r'"([^"]*)"|([^"]+)', s)]
['print ', 'Hello \\', 'World\\', '']
>>> shlex.split(s)
['print', 'Hello "World"']
Verfasst: Donnerstag 8. April 2010, 18:53
von DasIch
@Defnull Jetzt zeig uns dass ganze mal mit einem unicode string

Verfasst: Donnerstag 8. April 2010, 19:20
von Defnull
DasIch hat geschrieben:@Defnull Jetzt zeig uns dass ganze mal mit einem unicode string

Nur wenn du mir einen regulären Ausdruck zeigst, der das Problem löst.
Verfasst: Donnerstag 8. April 2010, 19:54
von DasIch
Seit wann sind reguläre Ausdrücke und shlex die einzige Möglichkeit? Man sollte doch noch so eben einen Parser für dass Problem hinbekommen.
Verfasst: Freitag 9. April 2010, 10:11
von sma
Defnull hat geschrieben:Nur wenn du mir einen regulären Ausdruck zeigst, der das Problem löst.
Code: Alles auswählen
import re
s = 'print "\"Hallo\" Welt"'
print([a or re.sub(r'\\(.)', '\\1', b) for a, b in re.findall(r'([^"]+)|"((?:\\.|[^"])*)"', s)])
Bei Python 2.x hätte ich `decode("string-escape")` benutzt, aber dieses Encoding scheint Python 3.x (was ich für alle meine Beispiele benutze) nicht mehr zu existieren und ob es einen anderen Namen bekommen hat, habe ich auf die Schnelle nicht gesehen.
Stefan
Verfasst: Freitag 9. April 2010, 11:30
von lunar
DasIch hat geschrieben:@Defnull Jetzt zeig uns dass ganze mal mit einem unicode string

Code: Alles auswählen
>>> import shlex
>>> s = u'print "Hello \"World\""'
>>> [t.decode('utf-8') for t in shlex.split(s.encode('utf-8'))]
[u'print', u'Hello "World"']
duck 'n run ...
Aber im Ernst: Je nach dem, wozu man das braucht, muss man früher oder später vielleicht so oder so Bytes erzeugen, ergo kann man das auch vor dem Trennen tun, und muss sich dann nicht mehr mit Parsern rumschlagen ...