Wie konvertiert man Escaped Zeichen in Python?

Ich möchte Strings mit Escaped-Zeichen in ihre normale Form umwandeln, genauso wie Pythons lexikalischer Parser:

>>> escaped_str = 'One \\\'example\\\'' >>> print(escaped_str) One \'Example\' >>> normal_str = normalize_str(escaped_str) >>> print(normal_str) One 'Example' 

Natürlich wird der langweilige Weg sein, alle bekannten entkommenen Charaktere einzeln zu ersetzen: http://docs.python.org/reference/lexical_analysis.html#string-literals

Wie würden Sie normalize_str() im obigen Code implementieren?

3 Solutions collect form web for “Wie konvertiert man Escaped Zeichen in Python?”

 >>> escaped_str = 'Ein \\\' Beispiel \\\ ''
 >>> print escaped_str.encode ('string_escape')
 Ein Beispiel\\\'
 >>> print escaped_str.decode ('string_escape')
 Ein Beispiel'

Mehrere ähnliche Codecs sind verfügbar , wie rot13 und hex.

Das obige ist Python 2.x, aber – da hast du gesagt (unten, in einem Kommentar), dass du Python 3.x benutzt hast – während es umständlich ist, ein Unicode-String-Objekt zu dekodieren, ist es immer noch möglich . Der Codec wurde auch in "unicode_escape" umbenannt:

 Python 3.3a0 (Standard: b6aafb20e5f5, 29.07.2011, 05:34:11) 
 [GCC 4.4.3] auf linux2
 Geben Sie "help", "copyright", "credits" oder "license" für weitere Informationen ein.
 >>> escaped_str = "Ein \\\ 'Beispiel \\\'"
 >>> Import Codecs
 >>> drucken (codecs.getdecoder ("unicode_escape") (escaped_str) [0])
 Ein Beispiel'

Ich nehme an, die Frage ist wirklich:

Ich habe einen String, der formatiert ist, als ob es ein Teil des Python-Quellcodes wäre. Wie kann ich es sicher so interpretieren, dass \n innerhalb der Zeichenfolge in eine Zeilenumbringung umgewandelt wird, werden Anführungszeichen an beiden Enden usw. erwartet?

Versuche ast.literal_eval .

 >>> import ast >>> print ast.literal_eval(raw_input()) "hi, mom.\n This is a \"weird\" string, isn't it?" hi, mom. This is a "weird" string, isn't it? 

Zum Vergleich: Gehen Sie den anderen Weg:

 >>> print repr(raw_input()) "hi, mom.\n This is a \"weird\" string, isn't it?" '"hi, mom.\\n This is a \\"weird\\" string, isn\'t it?"' 

Ungepaarte Backslashs sind nur Artefakte der Darstellung und werden nicht intern intern gespeichert. Sie könnten Fehler verursachen, wenn Sie versuchen, dies manuell zu tun.

Wenn Ihr einziges Interesse ist, einen Backslash zu entfernen, der nicht von einer ungeraden Menge von Backslashs vorausgegangen ist, könnte man eine Weile versuchen:

 escaped_str = 'One \\\'example\\\'' chars = [] i = 0 while i < len(escaped_str): if i == '\\': chars.append(escaped_str[i+1]) i += 2 else: chars.append(escaped_str[i]) i += 1 fixed_str = ''.join(chars) print fixed_str 

Untersuche deine Variablen danach und du wirst sehen, warum das, was du zu tun versuchst, keinen Sinn macht.

… aber auf einer seite beachten bin ich fast 100% sicher "genauso wie Pythons lexikalischer Parser" macht es nicht sozusagen einen Parser. Ein Parser ist für Grammatiken, die die Art und Weise beschreiben, wie man Worte zusammensetzt.

Du denkst an lexikalische Inhaltsüberprüfung vielleicht, die oft mit regulären Ausdrücken angegeben wird . Parser sind ein insgesamt anspruchsvolleres und mächtigeres Tier, und nicht etwas, das Sie für die Zwecke der linearen String-Manipulation umgehen möchten.

  • Gibt es einen Unterschied zwischen `%` -format operator und `str.format ()` in python in Bezug auf Unicode und utf-8 encoding?
  • Schnellste Möglichkeit, diese Bindestriche in Pythonstring einzufügen?
  • Erweiterte Zeichenfolgenformatierung vs Vorlagenstrings
  • Wie kann man einen festen Breitenstring ausrichten?
  • Was bedeutet 'h' in einer Python-Format-String?
  • Formatieren von Zahlen in Strings in Python
  • Python, drucken alle Schwimmer auf 2 Dezimalstellen in der Ausgabe
  • Konvertieren oder Deaktivieren eines Strings in Variablen (wie Format (), aber umgekehrt) in Python
  • Verschachtelte F-Strings
  • Wie kann ich einen Python-String mit Leerzeichen ausfüllen?
  • Schneiden von Strings in str.format
  • Python ist die beste Programmiersprache der Welt.