Substitua “\\” por “\” em uma seqüência de caracteres em c #

Eu ainda não entendo como fazer isso. Eu vi muitos posts sobre isso, mas nenhuma das soluções funcionou para mim.

Eu tenho uma string chamada “a \\ b”. O resultado que preciso é “a \ b”. Como isso é feito?

Eu tenho um arquivo de texto que tem uma seqüência de conexão de database apontando para uma instância chamada – Server \ DbInstance

Meu objective é fazer uma substituição de string no arquivo de texto – substitua “Server \ DbInstance” por outro valor, digamos “10.11.12.13, 1200”.

Então eu tenho:

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

É aqui que o problema começa. Meu stringToBeReplaced sempre será “Server \\ DbInstance”, e quando eu procurar por essa seqüência no meu arquivo de texto, a pesquisa falhará, como o arquivo de texto não tem uma seqüência de caracteres “Server \\ DbInstance”; em vez disso, ele tem apenas “Server \ DbInstance”. Então, como alterar “Server \\ DbInstance” para “Server \ DbInstance”?

    Eu suspeito que sua string já contenha apenas uma única barra invertida, mas você está olhando para ela no depurador que está escapando para você em um formato que seria válido como um literal de string regular em C #.

    Se imprimir no console, ou em uma checkbox de mensagem, ele mostra duas barras invertidas ou uma?

    Se você realmente quiser replace uma barra invertida dupla por uma única, é fácil fazer isso:

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

    … mas meu palpite é que o original não contém uma contrabarra dupla de qualquer maneira. Se isso não ajudar, por favor, dê mais detalhes.

    EDIT: Em resposta à pergunta editada, o seu stringToBeReplaced só tem uma única barra invertida. Realmente. Onde quer que você esteja vendo duas barras invertidas, o espectador está escapando. A string em si não tem duas barras invertidas. Examine stringToBeReplaced.Length e conte os caracteres.

    Eu tentei os procedimentos de seus posts, mas sem sucesso.

    Isso é o que recebo do depurador: insira a descrição da imagem aqui

    A string original que eu salvei no database sqlite era b\r\na .. quando eu os li, recebi b\\r\\na (comprimento no depurador é 6: "b" "\" "\r" "\" "\n" "a" ) então eu tento replace essa string e recebo string com comprimento 6 novamente (você pode ver na figura acima).

    Eu corro este pequeno script no meu formulário de teste com apenas uma checkbox 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(); } 

    e eu recebo isso na checkbox de texto (assim, nenhum novo caractere de linha entre “b” e “a”:

     b\r\na Length: 6 

    O que posso fazer com essa string para remover a barra invertida? (Espero nova linha entre “b” e “a”.)

    Solução:

    OK, isso não é possível com substituição padrão, porque \r e \n são um caractere. É possível replace parte da cadeia caractere por caractere, mas não é possível replace “meia parte” de um caractere. Então, eu devo replace qualquer caracter especial, assim:

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

    Isso produz resultado correto para mim:

     b a 

    no caso de alguém ficar preso com isso e nenhuma das respostas acima funcionou, abaixo está o que funcionou para mim. Espero que ajude.

     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" 

    Experimentar –

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

    Deveria trabalhar. Lembre-se que no relógio Visual STudio show o “\” escapou para que você veja “\” no lugar de um único.

    Você pode simplesmente fazer uma substituição na sua string como

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

    Eu estava tendo o mesmo problema até ler a resposta de Jon Skeet sobre o depurador exibindo uma única barra invertida com uma barra invertida dupla, mesmo que a cadeia possa ter uma única barra invertida. Eu não estava ciente disso. Então eu mudei meu código de

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

    para

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

    e isso resolveu o problema. Nota: Estou fazendo interface e R.Net, que usa barras simples em strings de caminho.