C# 将单反斜杠替换为双反斜杠

C# 将单反斜杠替换为双反斜杠,c#,regex,string,replace,backslash,C#,Regex,String,Replace,Backslash,看起来很简单,对吧?嗯,我不知道 以下是我正在尝试的代码: input = Regex.Replace(input, "\\", "\\\\\\"); 但是,我收到一个错误 ArgumentException未经处理-在模式末尾解析“\”-非法 怎么做?第一个应该是“\\\\”,而不是“\\\”。它的工作原理如下: 您已经编写了“\\” 这将转换为字符串中的序列\ 然后,正则表达式引擎读取该值,该值被翻译为反斜杠,不会转义任何内容,因此它会抛出一个错误 有了正则表达式,使用“逐字字符串”就

看起来很简单,对吧?嗯,我不知道

以下是我正在尝试的代码:

input = Regex.Replace(input, "\\", "\\\\\\");
但是,我收到一个错误

ArgumentException未经处理-在模式末尾解析“\”-非法


怎么做?

第一个应该是
“\\\\”
,而不是
“\\\”
。它的工作原理如下:

  • 您已经编写了
    “\\”
  • 这将转换为字符串中的序列
    \
  • 然后,正则表达式引擎读取该值,该值被翻译为反斜杠,不会转义任何内容,因此它会抛出一个错误
有了正则表达式,使用“逐字字符串”就容易多了。在这种情况下,逐字记录字符串将是
@“\\”
。当使用逐字字符串时,只需考虑ReEX引擎的转义,因为反斜线是按字面处理的。第二个字符串也将是
@“\\”
,因为它不会被正则表达式引擎解释

 var result = Regex.Replace(@"afd\tas\asfd\", @"\\", @"\\");
第一个参数是字符串\\,它位于正则表达式中。

第二个参数不是由正则表达式处理的,因此在替换时它将保持原样。

如果您想用两个反斜杠替换一个反斜杠,那么使用
@“…”
作为字符串文本(也称为逐字字符串)的格式,可以更清楚地消除正则表达式中的一级转义。这样更容易看出这一点

string output = Regex.Replace(input, @"\\", @"\\");

是从
\
\

的替换。如果以后打算在regex模式中使用输入,最好使用regex.Encode

input = Regex.Escape(input);

我知道现在帮你已经太晚了,也许其他人会从中受益。不管怎样,这对我来说很有效:

text = text.Replace(@"\",@"\\");
我发现这更简单


干杯

先生,你真是个天才!真棒的解释。我感到困惑的是第二个字符串没有被正则表达式引擎解释。一切都按我现在需要的方式工作。除非你在同一模式下做更复杂的事情,否则你是否考虑过
input=input.Replace(@“\”,@“\”)?这将用4个反斜杠替换1个反斜杠