我正在尝试执行以下操作:
代码前的字符串:
"don\'t"
"a\\b"
代码后字符串:
"\"don\\\'t\""
"\"a\\\\b\""
我编写了完美的代码:
string x = "";
x += "\"";
foreach (var item in s)
{
if (item == '\'' || item == '\"' || item == '\\')
{
x += '\\';
}
x += item;
}
x += "\"";
return x;
但有更好的方法吗?一个班轮代码?我不熟悉C#正则表达式,但我认为这可以通过它来实现。 谢谢你的帮助...
答案 0 :(得分:2)
我还有两种更好的方法:
使用StringBuilder
。这避免了多个中间string
分配:
var sb = new StringBuilder("\"");
foreach (var item in s)
{
if (item == '\'' || item == '\"' || item == '\\')
sb.Append('\\');
sb.Append(item);
}
sb.Append('"');
return sb.ToString();
正如您所说,使用正则表达式替换:
return "\"" + Regex.Replace(s, @"[\\'""]", "\\$&") + "\"";
正则表达式为[\\'"]
,这意味着匹配以下任何字符:\
或'
或"
,替换字符串为\$&
这意味着:用反斜杠替换它,后跟你刚匹配的。
编译器会将两个字符串连接重写为一个String.Concat
调用。