String teilen und ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

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
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Hallo,

versuch's mal mit der String-Split-Methode.

Grüße
Gerrit
BlackJack

Das `shlex`-Modul könnte auch interessant sein.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Urgs, warum Regex wenn doch shlex schon genannt wurde?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

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 ... :roll:
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

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"']
Bottle: Micro Web Framework + Development Blog
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@Defnull Jetzt zeig uns dass ganze mal mit einem unicode string :P
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

DasIch hat geschrieben:@Defnull Jetzt zeig uns dass ganze mal mit einem unicode string :P
Nur wenn du mir einen regulären Ausdruck zeigst, der das Problem löst.
Bottle: Micro Web Framework + Development Blog
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
lunar

DasIch hat geschrieben:@Defnull Jetzt zeig uns dass ganze mal mit einem unicode string :P

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 ...
Antworten