C#替换\"字符

46

我收到了一个XML字符串,想要通过XmlReader解析,并试图去除其中的\"字符。

我尝试过:

.Replace(@"\", "")
.Replace("\\''", "''")
.Replace("\\''", "\"")

还有其他几种方法。

有什么想法吗?

6个回答

77

你是这样尝试的吗:

string text = GetTextFromSomewhere();
text.Replace("\\", "");
text.Replace("\"", "");

如果是这样的话,那就是问题所在了 - Replace 函数不会改变原始字符串,它返回一个执行替换后的 字符串... 所以你应该使用:

string text = GetTextFromSomewhere();
text = text.Replace("\\", "").Replace("\"", "");

请注意,这将替换每个反斜杠双引号字符;如果您只想替换一对“反斜杠后跟双引号”的字符,那么您只需使用:

string text = GetTextFromSomewhere();
text = text.Replace("\\\"", "");

(正如评论中提到的那样,这是因为在.NET中字符串是不可变的——一旦你以某种方式获得了一个字符串对象,该字符串将始终具有相同的内容。当然,你可以给一个变量赋一个指向不同字符串的引用,但这实际上并没有改变现有字符串的内容。)


4
这是一个常见的错误,但经常会发生。在C#中,string 是不可变的,如果你改变了其中的任何内容,例如使用 Replace 方法,它总是会返回一个新的字符串。 - Anthony
10
请注意调试器在显示字符串时进行了转义。这些额外的反斜杠无法通过.Replace()删除。 - Olivier Jacot-Descombes

12
在.NET Framework 4和MVC中,这是唯一有效的表示方式:
Replace(@"""","")

在任何组合中使用反斜杠都没有起作用...


简单,谢谢。 - reyqueson
简单,谢谢。 - undefined

10
像这样尝试一下:
Replace("\\\"","");

这将用空字符串替换"的出现。

例如:

string t = "\\\"the dog is my friend\\\"";
t = t.Replace("\\\"","");

这将导致:
the dog is my friend

另外,你应该习惯使用 String.Empty 而不是 ""。 - user220583
@VoodooChild - 不,这正是正确数量的反斜杠。请看我的代码示例以证明。 - dcp
3
对于字符串为空的情况,我感到无所谓。这本质上没有区别。 - Greg
1
@kurtnelle - 我更喜欢“”,使用它并没有什么错。我认为它比string.empty更简洁。 - dcp
1
谢谢!你的示例帮了很大的忙。 - Met-u
显示剩余2条评论

1
\ => \\ and " => \"

所以Replace("\\\"","")


0

Replace(@"\""", "")

在verbatim字符串中,你必须使用双重引号来转义 双引号


0
这些字符出现在哪里?如果您在记事本中检查XML数据,是否可以看到它们?或者您在调试器中检查XML数据时是否可以看到它们?如果是后者,则它们只是"字符的转义字符,因此是实际XML数据的一部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接