我有一个字符串:
var a = "some text \"";
我想将\"
替换为"
。
a.Replace("\"", '"');
=> 'string.Replace(string,string)'的最佳重载方法匹配有一些无效的参数
a.Replace("\"", """);
=> 常量中的换行符
最后我想获得"some text"
答案 0 :(得分:8)
你需要逃避你的字符串,你正在寻找:
a.Replace("\\\"", "\"");
应该这样做!
注意强>
请注意 - 只需调用replace即可创建一个新的STRING VALUE,它不会编辑原始字符串。如果你想使用这个字符串你可以做内联替换,或者你可以像这样分配回原始值:
a = a.Replace("\\\"", "\"");
这也可能是你遇到的另一个问题!
答案 1 :(得分:1)
您似乎对C#的escaping规则感到困惑。文字"some text \""
的值为some text "
。如果你在VS调试器中查看这个字符串,它将显示产生值{C <1}}的C#文字。如果您打印它,您会看到其值实际为"some text \""
。
如果该值实际为some text "
,可由some text \"
或"some text \\\""
表示,那么您真正想要的是:
@"some text \"""
我怀疑你的字符串实际上已经是你想要的了,但是:var b = a.Replace("\\\"", "\"");
答案 2 :(得分:1)
您可以使用@
引入的逐字字符串。在逐字字符串中,双引号通过加倍来转义,并且反斜杠不再作为转义字符工作:
string result = a.Replace(@"\""", @"""");
与普通字符串相比,您仍然必须转义双引号("
),而不是反斜杠(\
)。
当然,您可以将两种解决方案结合起来:
string result = a.Replace(@"\""", "\"");
答案 3 :(得分:0)
你需要一些逃脱!使用此:
a.Replace("\\\"", "\"");
答案 4 :(得分:0)
'\'这将被视为C#中的转义字符,您需要使用双引号来替换它。 见下面的片段
string afterreplace = txtBox1.Text.Replace("\\\"", "\"");