逃避角色的最佳方式

aep*_*eus 2 c# string replace escaping

我需要逃避这些角色:将+-&|!(){}[]^"~*?:\它们放在前面\\.做这个的最好方式是什么.我的第一个想法是使用替换,但是会搜索字符串以替换每个项目.我认为必须有一种方法可以使用正则表达式来完成所有这一切.

Mar*_*ers 6

它可以使用正则表达式.最棘手的部分是正确地逃避特殊字符而不进入反斜杠地狱:

s = Regex.Replace(s, @"[+\-&|!(){}[\]^""~*?:\\]", "\\$0");
Run Code Online (Sandbox Code Playgroud)

Eric J.提到StringBuilder解决方案简单而优雅.这是编码它的一种方法:

StringBuilder sb = new StringBuilder();
foreach (char c in s)
{
    if ("+-&|!(){}[]^\"~*?:\\".Contains(c))
    {
        sb.Append('\\');
    }
    sb.Append(c);
}
s = sb.ToString();
Run Code Online (Sandbox Code Playgroud)