[英]Regex.Escape() unrecognized exception
我在C#
有以下代码:
String str = @"\hello ali how are you? are you fine? hello and hi";
Console.WriteLine(Regex.Matches(Regex.Escape(str), @"\hello").Count);
我收到以下错误:
{“parsing \\”\\ hello \\“ - 无法识别的转义序列\\ h。”}
我需要知道我的代码中何时存在\\ + (some names)
。 我使用@
来不使用转义序列字符,但我仍然得到提到的错误。 我不明白为什么会这样!
\\
用于表示正则表达式中的速记类。 例如\\d
表示“任何数字”,或\\w
表示“任何单词字符(字母数字字符加下划线)”。 正则表达式引擎认为你试图使用\\h
作为这些速记序列之一,但它不是有效的。
要匹配正则表达式中的文字\\
,您需要使用另一个文本\\
来转义它,例如\\\\
。 所以在你的例子中你的正则表达式是\\\\hello
。
有关更多详细信息,请参见http://www.regular-expressions.info/characters.html 。
转义序列在字符串和具有不同含义的正则表达式中独立使用。 当您使用@
为字符串文字添加前缀时,您告诉编译器在没有转义序列的情况下按字面解释字符串。 然而,正则表达式引擎再次看到“\\ h”并尝试将其解释为转义序列。
基本上你需要应用两个字符串字面@
和 Regex.Escape
功能,使\\h
双方解析器解释为文字:
Console.WriteLine(Regex.Matches(str, Regex.Escape(@"\hello")).Count);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.