0

我有一个正则表达式,我现在需要将它移到 C# 中。我收到这样的错误

Unrecognized escape sequence    

我正在使用 Regex.Escape - 但显然不正确。

string pattern = Regex.Escape("^.*(?=.{7,})(?=.*[a-zA-Z])(?=.*(\d|[!@#$%\?\(\)\*\&\^\-\+\=_])).*$");
hiddenRegex.Attributes.Add("value", pattern);

这是如何正确完成的?

4

2 回答 2

4

你得到的错误是在编译时出现的,对吗?这意味着 C# 编译器无法理解您的字符串。在字符串之前添加@符号,你应该没问题。你不需要 Regex.Escape。

请参阅C# 中字符串前面的 @ 是什么?

var pattern = new Regex(@"^.*(?=.{7,})(?=.*[a-zA-Z])(?=.*(\d|[!@#$%\?\(\)\*\&\^\-\+\=_])).*$");
pattern.IsMatch("Your input string to test the pattern against");
于 2012-05-02T16:40:17.507 回答
0

您收到的错误是由于您的字符串包含无效的转义序列(例如\d)。要解决此问题,请手动转义反斜杠或编写逐字字符串文字

string pattern = @"^.*(?=.{7,})(?=.*[a-zA-Z])(?=.*(\d|[!@#$%\?\(\)\*\&\^\-\+\=_])).*$";

Regex.Escape当您想要将动态内容嵌入到正则表达式时将使用,而不是在您想要构建固定的正则表达式时使用。例如,您将在此处使用它:

string name = "this comes from user input";
string pattern = string.Format("^{0}$", Regex.Escape(name));

您这样做是因为name很可能在正则表达式中包含具有特殊含义的字符,例如点或括号。何时name是硬编码(如您的示例中),您可以手动转义这些字符。

于 2012-05-02T16:43:11.277 回答