it-swarm.cn

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

我仍然不知道该怎么做。我看到了很多与此相关的帖子,但是没有一种解决方案适合我。

我有一个名为“ a \\ b”的字符串。我需要的结果是“ a\b”。怎么做?

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

我的目的是在文本文件中执行字符串替换-用另一个值(例如“ 10.11.12.13,1200”)替换“ Server\DbInstance”。

所以我有:

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

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

36
Sandeep

我怀疑您的字符串已经实际上仅包含一个反斜杠,但是您正在调试器中查看它,因此正在将其转义为可以用作C#中常规字符串文字的形式。

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

如果您实际上想要将一个双反斜杠替换为一个反斜杠,则很容易做到:

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

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

编辑:针对已编辑的问题,您的stringToBeReplaced仅包含一个反斜杠。无论您在哪里看到两个反斜杠,该查看器都在转义。字符串本身没有两个反斜杠。检查stringToBeReplaced.Length并计数字符。

66
Jon Skeet

我尝试了您发布帖子的过程,但没有成功。

这是我从调试器得到的: enter image description here

我保存到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();
    }

并且我在文本框中得到了它(因此,“ b”和“ a”之间没有换行符:

b\r\na

Length: 6

我可以用这个字符串来使反斜杠不转义吗? (我希望“ b”和“ a”之间有新的界线。)

解决方案:

好的,这不可能用标准替换完成,因为\r\n是一个字符。可以用一个字符替换字符串字符的一部分,但是不能替换一个字符的“一半”。因此,我必须单独替换任何特殊字符,如下所示:

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

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

b
a
6
Atiris

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

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"
5
niki b

在阅读Jon Skeet关于调试器显示单个反斜杠和双反斜杠的答案之前,我一直遇到同样的问题,即使字符串可能只有一个反斜杠。我没有意识到。所以我从

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

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

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

2
WalterWeinzinger

尝试-

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

应该管用。请记住,在Visual STudio手表中,“ \”转义了,所以您看到的是“ \”而不是一个。

0
Felice Pollano

您可以简单地在字符串中进行替换,例如

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