C# 字符串变量作为Regex()构造函数中的模式

C# 字符串变量作为Regex()构造函数中的模式,c#,regex,visual-studio-2015,C#,Regex,Visual Studio 2015,我不能在字符串变量中使用模式,因为正则表达式从不匹配 让我描述一下我想要实现的目标。我有一个返回密码字符串模式的服务。假设当前的模式是: \\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b 这意味着密码至少需要包含6个字符、一个数字和一个大写字母。我通过以下方式进行测试: string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b"; var rgxPasswordPattern = new Regex(pas

我不能在字符串变量中使用模式,因为正则表达式从不匹配

让我描述一下我想要实现的目标。我有一个返回密码字符串模式的服务。假设当前的模式是:

\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b
这意味着密码至少需要包含6个字符、一个数字和一个大写字母。我通过以下方式进行测试:

string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b";
var rgxPasswordPattern = new Regex(passwordPattern);
var result = rgxPasswordPattern.IsMatch("Password1");

if(result)
    Console.Write("Password match!");
else
    Console.Write("Password doesn't match!");
它有效,您可以在这里尝试:

当我在我的环境中使用上述代码时,就会出现问题。唯一的区别是我获取密码模式的方式:

string passwordPattern = _signInService.GetPasswordPattern();
我注意到
passwordPattern
包含带引号的模式:

这导致
rgxPasswordPattern
也包含引号:

因此,我通过
passwordPattern.Substring(1,passwordPattern.Length-2)
从模式中删除了引号:

并选中
rgxPasswordPattern
变量:

是的,没有额外的引号。但密码仍然与模式不匹配!

怎么可能呢?我不知道我还能做什么。模式很好,可以在dotnetfiddle.net中使用,但在我的环境中不起作用

非常感谢您的建议。

这一行

string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b";
在C#中,意思是
密码模式
实际上包含以下字符串

\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\b //notice backslahes count
在C#中定义字符串时,反斜杠将转义以下字符。所以,如果你想在字符串中添加
\
字符,你必须在那里加上双反斜杠
\
。因此,您的服务的问题在于它在模式中返回了额外的反斜杠。

这一行

string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b";
在C#中,意思是
密码模式
实际上包含以下字符串

\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\b //notice backslahes count

在C#中定义字符串时,反斜杠将转义以下字符。所以,如果你想在字符串中添加
\
字符,你必须在那里加上双反斜杠
\
。因此,您的服务的问题是它在模式中返回了额外的反斜杠。

是的,我直接将其键入
IsMatch()
方法(您可以在我问题的最后一张图片上看到)。不,它不起作用,我已经在问题的顶部描述了此场景。是的,我直接将其键入
IsMatch()
方法(你可以在我问题的最后一张图片上看到)。不,这行不通,我已经在问题的顶部描述了这个场景。天哪,你是对的,问题是双反斜杠。谢谢你的帮助,你救了我一天:)天哪,你是对的,问题是双反斜杠。谢谢你的帮助,你救了我一天:)