2008-08-17 40 views
10

he escrito una pieza de código para convertir striplashes de PHP en los escapes válidos Python [backslash]:versión Python de stripslashes de PHP

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

Como puedo condensarlo?

Respuesta

0

Puede concatenar obviamente todo juntos:

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

es eso lo que fueron después? ¿O estabas esperando algo más escueto?

-4

Python tiene una función de escape integrada() análoga a las agregaciones de PHP, pero no a la función unescape() (barras), que en mi opinión es un poco ridícula.

expresiones regulares para el rescate (código no probado):

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

En teoría que toma algo de la forma \\ (no espacios en blanco) y vuelve \ (misma char)

de edición: A más inspección, las expresiones regulares de Python están rotas como el infierno;

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

En conclusión, qué demonios, Python.

12

No del todo seguro de que esto es lo que quiere, pero ..

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

ahórreme millones de días. +1 –

2

Suena como lo que quiere podría ser razonablemente manejado de manera eficiente a través de expresiones regulares:

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

uso decode('string_escape')

cleaned = stringwithslashes.decode('string_escape') 

Usando

string_escape: Producir una cadena que es adecuado como cadena literal en el código fuente de Python

o concatenar los replace() como respuesta de Wilson.

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