2008-08-17 10 views
10

ich ein Stück Code geschrieben PHP striplashes in gültige Python [Backslash] Fluchten zu konvertieren:Python-Version von strip PHP

cleaned = stringwithslashes 
cleaned = cleaned.replace('\\n', '\n') 
cleaned = cleaned.replace('\\r', '\n') 
cleaned = cleaned.replace('\\', '') 

Wie kann ich es kondensieren?

Antwort

0

Sie können natürlich alles zusammen verketten:

cleaned = stringwithslashes.replace("\\n","\n").replace("\\r","\n").replace("\\","") 

Ist das, was nach waren Sie? Oder hast du auf etwas Kurzes gehofft?

-4

Python hat eine eingebaute Escape() -Funktion analog PHP addslashes, aber keine unescape() -Funktion (stripslashes), was meiner Meinung nach etwas lächerlich ist.

Reguläre Ausdrücke zur Rettung (Code nicht getestet):

p = re.compile('\\(\\\S)') 
p.sub('\1',escapedstring) 

In der Theorie, die alles von der Form \\ (keine Leerzeichen) nimmt und kehrt \ (gleiche Zeichen)

edit: Nach Weitere Inspektion, Python reguläre Ausdrücke sind als die Hölle gebrochen;

>>> escapedstring 
'This is a \\n\\n\\n test' 
>>> p = re.compile(r'\\(\S)') 
>>> p.sub(r"\1",escapedstring) 
'This is a nnn test' 
>>> p.sub(r"\\1",escapedstring) 
'This is a \\1\\1\\1 test' 
>>> p.sub(r"\\\1",escapedstring) 
'This is a \\n\\n\\n test' 
>>> p.sub(r"\(\1)",escapedstring) 
'This is a \\(n)\\(n)\\(n) test' 

Abschließend, was zur Hölle, Python.

12

nicht ganz sicher, das ist, was Sie wollen, aber ..

cleaned = stringwithslashes.decode('string_escape') 
+0

rette mich Millionen von Tagen. +1 –

2

Es klingt wie, was Sie wollen maßen effizient durch reguläre Ausdrücke behandelt werden könnten:

import re 
def stripslashes(s): 
    r = re.sub(r"\\(n|r)", "\n", s) 
    r = re.sub(r"\\", "", r) 
    return r 
cleaned = stripslashes(stringwithslashes) 
0

Verwendung decode('string_escape')

cleaned = stringwithslashes.decode('string_escape') 

Verwendung

string_escape: ein String, der als Produce Stringliteral in Python Quellcode

oder verketten die replace() wie Wilsons Antwort geeignet ist.

cleaned = stringwithslashes.replace("\\","").replace("\\n","\n").replace("\\r","\n")