Reemplaza “\\” con “\” en una cadena en C #

Todavía no entiendo cómo hacer esto. Vi muchas publicaciones con respecto a esto, pero ninguna de las soluciones funcionó para mí.

Tengo una cadena llamada “a \\ b”. El resultado que necesito es “a \ b”. ¿Cómo se hace esto?

Tengo un archivo de texto que tiene una cadena de conexión de base de datos que apunta a una instancia llamada – Server \ DbInstance

Mi objective es hacer una cadena de reemplazo en el archivo de texto – reemplace “Servidor \ DbInstance” con otro valor, digamos “10.11.12.13, 1200”.

Así que tengo:

stringToBeReplaced = @"Server\DbInstance"; newString = @"10.11.12.13, 1200"; 

Aquí es donde empieza el problema. Mi stringToBeReplace será siempre “Server \\ DbInstance”, y cuando busco esta cadena en mi archivo de texto, la búsqueda falla, ya que el archivo de texto no tiene una cadena “Server \\ DbInstance”; en su lugar, solo tiene “Server \ DbInstance”. Entonces, ¿cómo cambiar “Server \\ DbInstance” a “Server \ DbInstance”?

Sospecho que su cadena ya contiene una sola barra invertida, pero la está viendo en el depurador que se está escapando en un formulario que sería válido como un literal de cadena normal en C #.

Si lo imprime en la consola o en un cuadro de mensaje, ¿se muestra con dos barras diagonales inversas o una?

Si realmente desea reemplazar una barra invertida doble con una sola, es fácil hacerlo:

 text = text.Replace(@"\\", @"\"); 

… pero supongo que el original no contiene una doble barra invertida de todos modos. Si esto no ayuda, por favor brinde más detalles.

EDIT: en respuesta a la pregunta editada, tu stringToBeReplaced solo tiene una barra invertida. Realmente. Donde quiera que vea dos barras invertidas, ese espectador escapará de ella. La cadena en sí no tiene dos barras diagonales inversas. Examine stringToBeReplaced.Length y cuente los caracteres.

Probé los procedimientos de tus publicaciones pero sin éxito.

Esto es lo que obtengo del depurador: enter image description here

La cadena original que guardé en la base de datos sqlite era b\r\na … cuando los leí, obtuve b\\r\\na (la longitud en el depurador es 6: "b" "\" "\r" "\" "\n" "a" ) luego trato de reemplazar esta cadena y obtengo una cuerda con longitud 6 nuevamente (se puede ver en la imagen de arriba).

Ejecuto este breve script en mi formulario de prueba con solo un cuadro de texto:

 private void Form_Load(object sender, EventArgs e) { string x = "b\\r\\na"; string y = x.Replace(@"\\", @"\"); this.textBox.Text = y + "\r\n\r\nLength: " + y.Length.ToString(); } 

y obtengo esto en el cuadro de texto (entonces, no hay nuevos caracteres de línea entre “b” y “a”:

 b\r\na Length: 6 

¿Qué puedo hacer con esta cadena para deshacer una barra invertida? (Espero una nueva línea entre “b” y “a”).

Solución:

OK, esto no es posible con el reemplazo estándar, porque \r \n es un caracter. Es posible reemplazar parte de la cadena carácter por carácter, pero no es posible reemplazar “media parte” de un carácter. Entonces, debo reemplazar cualquier carácter especial por separado, así:

 private void Form_Load(object sender, EventArgs e) { ... string z = x.Replace(@"\r\n", Environment.NewLine); ... 

Esto produce el resultado correcto para mí:

 b a 

en caso de que alguien se quede atascado con esto y ninguna de las respuestas anteriores funcionó, a continuación, lo que funcionó para mí. Espero eso ayude.

 var oldString = "\\r|\\n"; // None of these worked for me // var newString = oldString(@"\\", @"\"); // var newString = oldString.Replace("\\\\", "\\"); // var newString = oldString.Replace("\\u5b89", "\u5b89"); // var newString = Regex.Replace(oldString , @"\\", @"\"); // This is what worked var newString = Regex.Unescape(oldString); // newString is now "\r|\n" 

Tratar –

 var newstring = @"a\\b".Replace(@"\\",@"\"); 
 string a = @"a\\b"; a = a.Replace(@"\\",@"\"); 

Deberia trabajar. Recuerde que en el reloj Visual Studio muestra la “\” escapada por lo que verá “\” en lugar de uno solo.

Simplemente puede hacer un reemplazo en su cadena como

 Str.Replace(@"\\",@"\"); 

Estaba teniendo el mismo problema hasta que leí la respuesta de Jon Skeet sobre el depurador que muestra una sola barra inclinada invertida con doble barra invertida, aunque la cadena puede tener una sola barra inclinada invertida. No estaba enterado de eso. Así que cambié mi código de

 text2 = text1.Replace(@"\\", @"/"); 

a

 text2 = text1.Replace(@"\", @"/"); 

y eso resolvió el problema. Nota: estoy interactuando y R.Net que usa barras diagonales simples en cadenas de ruta.