Regex.Escape()无法识别的异常

时间:2016-11-17 15:51:37

标签: c#

我在C#中有以下代码:

String str = @"\hello ali how are you? are you fine? hello and hi";
Console.WriteLine(Regex.Matches(Regex.Escape(str), @"\hello").Count);

我收到以下错误:

  

{"解析\" \ hello \" - 无法识别的转义序列\ h。"}

我需要知道我的代码中何时存在 \ + (some names) 。我使用@不使用转义序列字符,但我仍然得到提到的错误。我不明白为什么会这样!

2 个答案:

答案 0 :(得分:2)

\用于表示正则表达式中的简写类。例如\d表示“任何数字”,或\w表示“任何单词字符(字母数字字符加下划线)”。正则表达式引擎认为您正在尝试使用\h作为这些速记序列之一,但它不是有效的。

要匹配正则表达式中的文字\,您需要将其与另一个文档进行转义,例如\\。因此,在您的示例中,您的正则表达式为\\hello

有关详细信息,请参阅http://www.regular-expressions.info/characters.html

答案 1 :(得分:1)

转义序列在具有不同含义的字符串正则表达式中单独使用。当您使用@为字符串文字添加前缀时,您告诉编译器在没有转义序列的情况下按字面解释字符串。然而,正则表达式引擎再次看到" \ h"并尝试将其解释为转义序列。

基本上你需要两者字符串文字@ Regex.Escape函数,以使\h被解释为两个解析器的文字:

Console.WriteLine(Regex.Matches(str, Regex.Escape(@"\hello")).Count);