Escapesequenzen aus String entfernen

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.
Danic
User
Beiträge: 10
Registriert: Montag 8. Januar 2007, 20:56
Kontaktdaten:

Escapesequenzen aus String entfernen

Beitragvon Danic » Mittwoch 10. Januar 2007, 16:15

Hallo Männer,

ich möchte gerne aus einem String die Escapesequenzen entfernen.

Derzeit habe ich einen String der so aussieht (Escapesequenzen habe ich auch eingetippt):
'\\u0020Hallo Welt\\n\r\nNewLine'
Wenn ich diesen per print ausgebe, sieht er also so aus:
'\u0020HalloWelt\n
NewLine'

Ich würde jetzt gerne dass der String so wie er ausgegeben wird, interpretiert wird. Also dass er so aussieht, wenn ich ihn printe
' Hallo Welt
NewLine'
Das heißt, dass er mit Escapesequenz so aussieht: '\u0020Hallo Welt\nNewLine'

Ich hoffe ihr versteht was ich meine. Also irgendwie die alten Escape-Sequenzen löschen und stattdessen die, die mit ausgegeben werden, benutze.

EDIT:
Oki, ich versuche es Anhand eines Codebeispiels erklären:

Aber wie? :oops:

Code: Alles auswählen


# get ist der String, den ich zurückbekomme:

myGetString = get
print myGetString
# - Ausgabe:
#\u0020Hallo Welt\n
#NewLine
repr(myGetString)
# - Ausgabe:
#\\u0020Hallo Welt\\n\r\nNewLine

#So, jetzt werden die Escapesqeuenzen gelöscht. Allerdings kenne ich die Methoden nicht, deshalb passiert das unsichtbar. Jedenfalls so meine Ausgabe nacher so aussehen:


print myGetString
# - Ausgabe:
# Hallo Welt
#NewLine
repr(myGetString)
# - Ausgabe:
#\u0020Hallo Welt\nNewLine


Allerdings möchte ich auf replace('\u0020', '') verzichten, da ich sonst eine Menge an Replaces (für jede Einzelne Sequenz) machen müsste, und ich will keine übersehen.
Zuletzt geändert von Danic am Mittwoch 10. Januar 2007, 17:46, insgesamt 2-mal geändert.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Mittwoch 10. Januar 2007, 16:23

[code=]PythonWin 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32.
Portions Copyright 1994-2006 Mark Hammond - see 'Help/About PythonWin' for further copyright information.
>>> print "lol\nlol"
lol
lol
>>> print u"lol\nlol"
lol
lol
>>> print u'\\u0020Hallo Welt\\n\r\nNewLine'
\u0020Hallo Welt\n
NewLine [/code]

also einmal "\n" neu linie aber du hast auch einmal "\\n" das erste \ macht das zweite \ Wirkungslos. Ich weiß ich bin schlecht im erklären aber so ist es :-D
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 10. Januar 2007, 17:19

Code: Alles auswählen

print "\\u0020Hallo Welt\\n\r\nNewLine'"
print
print "\\u0020Hallo Welt\\n\r\nNewLine'".replace('\u0020', '').replace('\\n', '')


Output:

Code: Alles auswählen

\u0020Hallo Welt\n
NewLine'

Hallo Welt
NewLine'
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 10. Januar 2007, 17:22

Code: Alles auswählen

str_ = "\\u0020Hallo Welt\\n\r\nNewLine'"

if '\u0020' in str_:
    str_ = str_.replace('\u0020', '')
if '\\n' in str_:
    str_ = str_.replace('\\n', '')

print str_
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 10. Januar 2007, 17:26

BTW: Es sind keine Escape Sequenzen. \n ist eine, auch \t, aber \\n und \\t sind keine.
Danic
User
Beiträge: 10
Registriert: Montag 8. Januar 2007, 20:56
Kontaktdaten:

Beitragvon Danic » Mittwoch 10. Januar 2007, 17:35

Sape hat mein Problem verstanden :)

Gibt es auch eine Möglichkeit, das zu erreichen ohne replace oder RegEx? Sonst müsste ich für jede Sequenz eine Regel machen. Und dann bleibt immernoch die Gefahr, dass ich etwas übersehe.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 10. Januar 2007, 17:42

Nicht das ich wüsste. Wenn du verschiedene Sachen hast die aus Strings entfernt werden müssen, dann muss du dir eine Funktion bauen die diese Sachen entfernt. regEx würde sich dafür gut machen, denke ich. Aber auch mit einer schleife mit ``if`` könnte das gehen. Müsste man sehe was schneller ist letztendlich. (Bin nicht so der Fan von regEx und nutze das nur wenn es wirklich nicht anders geht).

Ich setze mich später mal ran. Brauche auch noch ne Funktion die mir alle _wirklichen_-Escape Sequenzen entfernt.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 10. Januar 2007, 18:12

``remove_escape`` entfernt alle Escape-Seq. in dem String.

Du könntest nun alle tokens die in einem String entfernt werden sollen, in einer liste packen und dann ``remove_token`` mit dem String und der Liste aufrufen. Mit regEx lässt sich das bestimmt aber auch lösen.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

ESCAPE_SEQUENCE = ["\'", '\"', '\a', '\b ', '\f', '\n', '\N',
                   '\r', '\t', '\u', '\U', '\v', '\o', '\\']

_DEFAULT = ESCAPE_SEQUENCE
def remove_token(str_, token = _DEFAULT):
    for tok in token:
        str_ = str_.replace(tok, '')
    return str_

def remove_escape(str_):
    return remove_token(str_, ESCAPE_SEQUENCE)

if __name__ == '__main__':
    print 'Hello\n\" \tWorld'
    print '-' * 79
    print remove_escape('Hello\n\" \tWorld')


BTW: Ich hoffe ich habe alle Escape-Seq. in die Liste gepackt ^^ Hab sie von hier: http://docs.python.org/ref/strings.html#l2h-13
BTW2: \x gibt "ValueError: invalid \x escape" zurück, daher habe ich das nicht mit in die Liste gepackt.
BlackJack

Beitragvon BlackJack » Mittwoch 10. Januar 2007, 18:13

Kinders, warum denn so umständlich:

Code: Alles auswählen

In [10]: print "\\u0020Hallo Welt\\n\r\nNewLine'".decode('unicode-escape')
 Hallo Welt

NewLine'
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 10. Januar 2007, 18:16

BlackJack hat geschrieben:Kinders, warum denn so umständlich:

Code: Alles auswählen

In [10]: print "\\u0020Hallo Welt\\n\r\nNewLine'".decode('unicode-escape')
 Hallo Welt

NewLine'

Ups :D Ja, stimmt, da war doch mal was im Wiki ^^ Sorry, hatte ich wider vergessen :-[ In dem Fall ``remove_escape`` ignorieren bitte :)
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 10. Januar 2007, 18:17

Und hier ist die stelle auch im Wiki: [wiki]String Escapen[/wiki]
^^

lg
Danic
User
Beiträge: 10
Registriert: Montag 8. Januar 2007, 20:56
Kontaktdaten:

Beitragvon Danic » Mittwoch 10. Januar 2007, 20:20

Geeeeeeeeeeeeeeeeeeeeeeeeenau! :lol:

Danke!
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Mittwoch 10. Januar 2007, 20:36

Danic hat geschrieben:Geeeeeeeeeeeeeeeeeeeeeeeeenau! :lol:
Ja ich weiß ^^ Aber Python ist nur ein Hobby von mir und nicht meine Lebensaufgabe. Daher kann ich mir auch nicht die Zeit nehmen alles darüber zu Wissen ;) Aber bissel hast recht, ist schon ein wenig *lol* das ich gerade das nicht mehr im Kopf hatte ^^

lg
Danic
User
Beiträge: 10
Registriert: Montag 8. Januar 2007, 20:56
Kontaktdaten:

Beitragvon Danic » Mittwoch 10. Januar 2007, 20:45

Ups, iso meinte ich das glaube nicht sape.

Wollte eigentlich sagen:
Geeeeeeeeeeeeeeeeeeeeeeeeenau so etwas habe ich gesucht! :D

Danke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder