在C#中的字符串中将"\\"替换为"\"

San*_*eep 37 c# string replace backslash

我仍然不知道如何做到这一点.我看到很多关于此的帖子,但没有一个解决方案适合我.

我有一个名为"a \\ b"的字符串.我需要的结果是"a\b".这是怎么做到的?

我有一个文本文件,其中有一个数据库连接字符串,指向一个名为Server\DbInstance的实例

我的目标是在文本文件中进行字符串替换 - 将"Server\DbInstance"替换为另一个值,例如"10.11.12.13,1200".

所以我有:

stringToBeReplaced = @"Server\DbInstance";
newString = @"10.11.12.13, 1200";
Run Code Online (Sandbox Code Playgroud)

这是问题开始的地方.我的stringToBeReplaced将永远是"Server \\ DbInstance",当我在我的文本文件中搜索此字符串时,搜索失败,因为文本文件没有字符串"Server \\ DbInstance"; 相反,它只有"Server\DbInstance".那么如何将"Server \\ DbInstance"更改为"Server\DbInstance"?

Jon*_*eet 68

我怀疑你的字符串实际上只包含一个反斜杠,但是你在调试器中查看它,它会将它转换为一个在C#中作为常规字符串文字有效的形式.

如果在控制台或消息框中打印出来,是否显示两个反斜杠或一个?

如果你真的想用一个双反斜杠替换一个,我很容易这样做:

text = text.Replace(@"\\", @"\");
Run Code Online (Sandbox Code Playgroud)

...但我的猜测是,原始版本不包含双反斜杠.如果这没有帮助,请提供更多详细信息.

编辑:在回答编辑过的问题时,你stringToBeReplaced只有一个反斜杠.真的.无论你在哪里看到两个反斜杠,那个观众都会逃避它.字符串本身没有两个反斜杠.检查stringToBeReplaced.Length并统计字符.

  • 它仍然不适合我:(我已经用我当前的情况更新了问题. (5认同)
  • 解决了这个问题......问题在于我正在做的替换.我正在表演Regex.Replace.相反,我应该使用string.Replace方法... Regex.Replace(stringToBeReplaced,@"\\",@"\")不起作用.. stringToBeReplaced.Replace(@"\\",@"\" )工作...... !!!! (3认同)

Ati*_*ris 6

我尝试了你的帖子的程序,但没有成功.

这是我从调试器得到的: 在此输入图像描述

我保存到sqlite数据库的原始字符串是b\r\na..当我读取它们时,我得到b\\r\\na(调试器中的长度为6 :) "b" "\" "\r" "\" "\n" "a"然后我尝试替换此字符串并再次获得长度为6的字符串(您可以在上面的图片中看到).

我只用一个文本框在我的测试表单中运行这个简短的脚本:

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();
    }
Run Code Online (Sandbox Code Playgroud)

我在文本框中得到了这个(所以,"b"和"a"之间没有新的行符号:

b\r\na

Length: 6
Run Code Online (Sandbox Code Playgroud)

我怎么能用这个字符串来反转?(我希望"b"和"a"之间有新的一行.)

解:

好吧,这不可能与标准替换,因为\r\n是一个字符.可以逐字符替换部分字符串,但不能替换一个字符的"半部分".所以,我必须单独替换任何特殊字符,如下所示:

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

这为我产生了正确的结果:

b
a
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了同样的问题,直到我阅读了 Jon Skeet 关于调试器显示单个反斜杠和双反斜杠的答案,即使字符串可能有一个反斜杠。我不知道。所以我改变了我的代码

text2 = text1.Replace(@"\\", @"/");
Run Code Online (Sandbox Code Playgroud)

text2 = text1.Replace(@"\", @"/");
Run Code Online (Sandbox Code Playgroud)

这解决了问题。注意:我正在连接和 R.Net,它在路径字符串中使用单个正斜杠。


nik*_*i b 5

万一有人卡住了,而上面的答案都没有用,下面是对我有用的。希望能帮助到你。

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"
Run Code Online (Sandbox Code Playgroud)