用双反斜杠替换单反斜杠

时间:2011-05-24 03:46:06

标签: c# regex string replace backslash

看起来很简单吧?好吧,我不知道。

这是我正在尝试的代码:

input = Regex.Replace(input, "\\", "\\\\\\");

但是,我收到错误,

  

ArgumentException未处理 - 在模式结束时解析“\” - 非法\。

我该怎么做?

5 个答案:

答案 0 :(得分:24)

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

  • 您已撰写"\\"
  • 这会转换为字符串中的序列\
  • 然后正则表达式引擎会读取此内容,该内容会转换为反斜杠,而不会转义任何内容,因此会引发错误。

使用正则表达式,使用“逐字字符串”要容易得多。在这种情况下,逐字字符串将是@"\\"。使用逐字字符串时,您只需考虑转义正则表达式引擎,因为反斜杠是按字面处理的。第二个字符串也将是@"\\",因为它不会被正则表达式引擎解释。

答案 1 :(得分:7)

如果要将一个反斜杠替换为两个,则使用@"..."作为字符串文字的格式(也称为逐字字符串),可以更清楚地消除正则表达式中的一级转义。然后更容易看到

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

是从\\\的替代。

答案 2 :(得分:3)

 var result = Regex.Replace(@"afd\tas\asfd\", @"\\", @"\\");

第一个参数是字符串\\,在正则表达式中是\ 第二个参数不是由正则表达式处理的,因此在替换时它会按原样放置。

答案 3 :(得分:2)

如果您打算稍后在正则表达式模式中使用输入,则最好使用Regex.Encode。

input = Regex.Escape(input);

答案 4 :(得分:0)

我知道为你提供帮助为时已晚,也许别人会从中受益。无论如何,这对我有用:

text = text.Replace(@"\",@"\\");

我觉得它更简单。

干杯!