正则表达式或一个代码来操纵字符串

时间:2015-01-18 12:20:31

标签: c# regex

我正在尝试执行以下操作:

代码前的字符串:

"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#正则表达式,但我认为这可以通过它来实现。 谢谢你的帮助...

1 个答案:

答案 0 :(得分:2)

我还有两种更好的方法:

  1. 使用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();
    
  2. 正如您所说,使用正则表达式替换:

    return "\"" + Regex.Replace(s, @"[\\'""]", "\\$&") + "\"";
    

    正则表达式为[\\'"],这意味着匹配以下任何字符:\'" ,替换字符串为\$&这意味着:用反斜杠替换它,后跟你刚匹配的

    编译器会将两个字符串连接重写为一个String.Concat调用。