2011-06-23 51 views
7

¿Cómo reemplazo "con \" en una cadena de python?Python - comillas dobles de escape utilizando string.replace

que tienen una cadena con comillas dobles:

s = 'a string with "double" quotes' 

quiero escapar de las comillas dobles con una barra invertida.

Hacer lo siguiente funciona no del todo, se escapa con dos barras invertidas:

s.replace('"', '\\"') 
'a string with \\"double\\" quotes' 

Impresión de la salida de esa cadena muestra lo que quiero. Pero no solo quiero imprimir la cadena correcta, quiero que se guarde en una variable. ¿Alguien puede ayudarme con la correcta expresión regular mágica?

Respuesta

8

La cadena es correcta. Pero repr usará una barra invertida -se escapa para mostrar caracteres no imprimibles, y por coherencia (se supone que forma un literal de cadena Python que, cuando se evalúa, devuelve la misma cadena que fue la entrada a repr) también escapa cada barra invertida que se produce en el cuerda.

Tenga en cuenta que este es un algoritmo de escape bastante limitado. Dependiendo de para qué lo necesite, puede tener que expandirlo significativamente (o hay una solución preparada, por ejemplo, declaraciones preparadas al trabajar con bases de datos)

8

Su intento original funciona bien. Las barras diagonales inversas dobles que ves son simplemente una forma de mostrar las barras invertidas simples que están realmente en la cuerda. Ver también: __repr__()

>>> s = 'a string with "double" quotes' 
>>> ss = s.replace('"', '\\"') 
>>> len(s) 
29 
>>> len(ss) 
31 
0

una barra invertida no puede ser visto, pero la barra invertida se mantiene en la cadena. si va a verificar la longitud de la misma cadena, podrá ver la respuesta. Además, si reemplaza una nueva cadena nuevamente con comillas dobles, obtendrá la cadena original.

1

Esto hizo el trabajo para mí.

s.replace('"', '\\"') 
Cuestiones relacionadas