我在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)
。我使用@
不使用转义序列字符,但我仍然得到提到的错误。我不明白为什么会这样!
答案 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);