python string replace backslash

python reemplazar sola barra inclinada invertida con doble barra diagonal inversa



string replace (8)

En Python, estoy tratando de reemplazar una sola barra invertida ("/") con una barra invertida doble ("/"). Tengo el siguiente código:

directory = string.replace("C:/Users/Josh/Desktop/20130216", "/", "//")

Sin embargo, esto da un mensaje de error que dice que no le gusta la doble barra diagonal inversa. ¿Alguien puede ayudar?


Déjame hacerlo simple y claro. Permite usar el módulo re en python para escapar de los caracteres especiales.

Script de Python:

import re s = "C:/Users/Josh/Desktop" print s print re.escape(s)

Salida:

C:/Users/Josh/Desktop C://Users//Josh//Desktop

Explicación

Ahora observe que la función re.escape al escapar los caracteres especiales en la cadena dada, podemos agregar otra barra invertida antes de cada barra invertida, y finalmente la salida da como resultado una doble barra diagonal inversa, la salida deseada.

Espero que esto te ayude.


Dada la cadena fuente, la manipulación con os.path podría tener más sentido, pero aquí hay una solución de cadena;

>>> s=r"C:/Users/Josh/Desktop//20130216" >>> ''////'.join(filter(bool, s.split(''//'))) ''C:////Users////Josh////Desktop////20130216''

Tenga en cuenta que split trata el // en la cadena fuente como una cadena vacía delimitada. Al usar el filter se eliminan esas cadenas vacías, por lo que join no doblará las barras invertidas ya dobladas. Desafortunadamente, si tienes 3 o más, se reducen a doblar barras diagonales inversas, pero no creo que eso te lastime en una expresión de ruta de Windows.


En python / (barra invertida) se usa como un carácter de escape. Lo que significa que en los lugares donde desea insertar un carácter especial (como nueva línea), usaría la barra diagonal inversa y otro carácter ( /n para nueva línea)

Con su ejemplo de ejemplo, notará que cuando coloca "C:/Users/Josh/Desktop/20130216" en la réplica, obtendrá "C://Users//Josh//Desktop/x8130216" . Esto se debe a que /2 tiene un significado especial en una picadura de pitón. Si desea especificar / , necesita poner dos // en su cadena.

"C://Users//Josh//Desktop//28130216"

La otra opción es notificar a Python que tu aguijón NO debe usar / como un carácter de escape antes de aguardar el aguijón con r

r"C:/Users/Josh/Desktop/20130216"

Esta es una cadena "en bruto", y es muy útil en situaciones en las que necesita utilizar muchas barras diagonales inversas, como con picaduras de expresiones regulares.

En caso de que aún desee reemplazar ese single / con // , entonces usaría:

directory = string.replace(r"C:/Users/Josh/Desktop/20130216", "//", "////")

Tenga en cuenta que no estoy usando r'' en las últimas dos picaduras anteriores. Esto se debe a que, cuando usas la forma r'' de picaduras, no puedes terminar esa cadena con una sola /

¿Por qué los literales de cadena sin formato de Python no pueden terminar con una sola barra invertida?

https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-are-escape-characters/


La barra invertida indica un carácter de escape especial. Por lo tanto, directory = path_to_directory.replace("/", "//") haría que Python pensara que el primer argumento para reemplazar no terminaba hasta la cita inicial del segundo argumento ya que entendía la cita final como un carácter de escape .

directory=path_to_directory.replace("//","////")


No es necesario usar str.replace o string.replace aquí, simplemente convierta esa cadena en una cadena sin formato:

>>> strs = r"C:/Users/Josh/Desktop/20130216" ^ | notice the ''r''

A continuación se muestra la versión repr de la cadena anterior, es por eso que estás viendo // aquí. Pero, de hecho, la cadena actual contiene solo ''/' no // .

>>> strs ''C://Users//Josh//Desktop//20130216'' >>> s = r"f/o" >>> s #repr representation ''f//o'' >>> len(s) #length is 3, as there''s only one `''/'` 3

Pero cuando va a imprimir esta cadena, no obtendrá ''//' en la salida.

>>> print strs C:/Users/Josh/Desktop/20130216

Si desea que la cadena muestre ''//' durante la print , utilice str.replace :

>>> new_strs = strs.replace(''//',''////') >>> print new_strs C://Users//Josh//Desktop//20130216

repr versión repr ahora mostrará //// :

>>> new_strs ''C:////Users////Josh////Desktop////20130216''


Tal vez un error de sintaxis en su caso, puede cambiar la línea a:

directory = str(r"C:/Users/Josh/Desktop/20130216").replace(''//',''////')

que le dan el siguiente resultado correcto:

C://Users//Josh//Desktop//20130216


Use los caracteres de escape: "full//path//here" , "//" y "////"


Utilizar:

string.replace(r"C:/Users/Josh/Desktop/20130216", "//", "//")

Escape the / character.