Seite 1 von 1

Escapesequenzen aus String entfernen

Verfasst: Mittwoch 10. Januar 2007, 16:15
von Danic
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.

Verfasst: Mittwoch 10. Januar 2007, 16:23
von Sr4l

Code: Alles auswählen

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

Verfasst: Mittwoch 10. Januar 2007, 17:19
von sape

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'

Verfasst: Mittwoch 10. Januar 2007, 17:22
von sape

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_

Verfasst: Mittwoch 10. Januar 2007, 17:26
von sape
BTW: Es sind keine Escape Sequenzen. \n ist eine, auch \t, aber \\n und \\t sind keine.

Verfasst: Mittwoch 10. Januar 2007, 17:35
von Danic
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.

Verfasst: Mittwoch 10. Januar 2007, 17:42
von sape
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.

Verfasst: Mittwoch 10. Januar 2007, 18:12
von sape
``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.

Verfasst: Mittwoch 10. Januar 2007, 18:13
von BlackJack
Kinders, warum denn so umständlich:

Code: Alles auswählen

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

NewLine'

Verfasst: Mittwoch 10. Januar 2007, 18:16
von sape
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 :)

Verfasst: Mittwoch 10. Januar 2007, 18:17
von sape
Und hier ist die stelle auch im Wiki: [wiki]String Escapen[/wiki]
^^

lg

Verfasst: Mittwoch 10. Januar 2007, 20:20
von Danic
Geeeeeeeeeeeeeeeeeeeeeeeeenau! :lol:

Danke!

Verfasst: Mittwoch 10. Januar 2007, 20:36
von sape
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

Verfasst: Mittwoch 10. Januar 2007, 20:45
von Danic
Ups, iso meinte ich das glaube nicht sape.

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

Danke