即使我试图逃避一切,C#也不会将我的正则表达式识别为字符串

Alp*_*der 1 .net c# regex

我使用C#并希望在我的代码中使用以下正则表达式:

sDatabaseServer\s*=\s*"([^"]*)"
Run Code Online (Sandbox Code Playgroud)

我把它放在我的代码中:

Regex databaseServer = new Regex(@"sDatabaseServer\s*=\s*"([^"]*)"", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
Run Code Online (Sandbox Code Playgroud)

我知道你必须在字符串引号内转义所有括号和引号但由于某种原因,以下操作仍然无效:

工作版本:

Regex databaseServer = new Regex(@"sDatabaseServer\s*=\s*""([^""]*)""", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
Run Code Online (Sandbox Code Playgroud)

有任何想法如何让C#看到我的正则表达式只是一个字符串?我知道我知道....简单的问题...对不起我仍然有点像C#的业余爱好者...

解决:谢谢你们!

Mar*_*der 5

当你逃脱括号时,你走得太远了.如果您希望它们是正则表达式元字符(即捕获组),那么您不能逃避它们.否则他们将匹配字面括号.

所以这可能就是你要找的东西:

@"sDatabaseServer\s*=\s*""([^""]*)"""
Run Code Online (Sandbox Code Playgroud)

  • @ThePracticalSyde为什么你不应该为正则表达式使用非逐字字符串:如果你想匹配文字`$`,正则表达式要求你写'\ $`.但是如果你把它放在一个普通的字符串中,那么C#编译器会将它视为转义的`$`,因此保存的字符串永远不会包含反斜杠.因此,您需要编写`\\ $`,这可能会非常烦人(特别是因为引号只需要转义一次).因此:尝试尽可能使用逐字字符串(通过将它们加倍来逃避引号) (2认同)