20

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

这是我正在尝试的代码:

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

但是,我收到一个错误,

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

我该怎么做呢?

4

5 回答 5

25

第一个应该是"\\\\",不是"\\"。它是这样工作的:

  • 你已经写了"\\"
  • 这转换为\字符串中的序列。
  • 正则表达式引擎然后读取这个,它转换为反斜杠,它没有转义任何东西,所以它抛出一个错误。

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

于 2011-05-24T03:53:38.543 回答
8

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

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

是从\到的替代品\\

于 2011-05-24T03:58:36.147 回答
6

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

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

我发现它更简单。

干杯!

于 2016-08-10T12:53:33.630 回答
4
 var result = Regex.Replace(@"afd\tas\asfd\", @"\\", @"\\");

第一个参数是字符串 \\,它是正则表达式中的 \。
第二个参数没有被正则表达式处理,所以在替换的时候会保持原样。

于 2011-05-24T03:55:49.000 回答
2

如果您打算稍后在正则表达式模式中使用输入,那么使用 Regex.Encode 可能是个好主意。

input = Regex.Escape(input);
于 2011-05-24T06:02:07.393 回答