raw escape characters python escaping backslash

escape - ¿Cómo reemplazar una barra diagonal inversa doble con una barra diagonal inversa única en Python?



python replace (5)

Tengo una cuerda. En esa cadena hay doble barras invertidas. Quiero reemplazar las barras invertidas dobles con barras invertidas simples, para que los códigos de caracteres Unicode puedan analizarse correctamente.

(Pdb) p fetched_page ''<p style="text-align:center;" align="center"><strong><span style="font-family:/'Times New Roman/', serif;font-size:115%;">Chapter 0<///span><///strong><///p>/n<p><span style="font-family:/'Times New Roman/', serif;font-size:115%;">Chapter 0 in //u201cDreaming in Code//u201d give a brief description of programming in its early years and how and why programmers are still struggling today...''

Dentro de esta cadena, puede ver códigos de caracteres de Unicode escapados, como:

//u201c

Quiero convertir esto en:

/u201c

Intento 1:

fetched_page.replace(''////', ''//')

pero esto no funciona - busca barras inversas cuádruples.

Intento 2:

fetched_page.replace(''//', ''/')

Pero esto resulta en un error de final de línea.

Intento 3:

fetched_page.decode(''string_escape'')

Pero esto no tuvo efecto en el texto. Todas las barras invertidas dobles permanecieron como barras invertidas dobles.


No estoy recibiendo el comportamiento que describe:

>>> x = "////////" >>> print x //// >>> y = x.replace(''////', ''//') >>> print y //

Cuando ve ''////' en su salida, está viendo el doble de barras diagonales que hay en la cadena porque cada una de ellas se escapa. El código que escribiste debería funcionar bien. Intente print los valores reales, en lugar de solo observar cómo el REPL los muestra.


Para ampliar la respuesta de Jeremy, su problema es que ''/' es una cadena ilegal porque /' escapa de la comilla, por lo que su cadena nunca termina.


Puede ser un poco excesivo, pero ...

>>> import re >>> a = ''//u201c//u3012'' >>> re.sub(r''//u[0-9a-fA-F]{4}'', lambda x:eval(''"'' + x.group() + ''"''), a) ''“〒''

Entonces, sí, la solución más simple sería la respuesta de codecs.escape_decode llamar a codecs.escape_decode en la cadena y tomar el resultado (o el primer elemento del resultado si escape_decode devuelve una tupla como parece en Python 3). Sin codecs.unicode_escape_decode en Python 3 querría usar codecs.unicode_escape_decode cuando se trabaja con cadenas (a diferencia de los objetos de bytes).


Puedes probar codecs.escape_decode , esto debería decodificar las secuencias de escape.


Solo imprímelo:

>>> a = ''//u201c'' >>> print a /u201c