我正在尝试将多个字符串与正则表达式列表进行比较。我试图做到这一点,这样我就可以将我拥有的所有字符串与所有正则表达式进行比较,如果它不匹配任何正则表达式,那么它将被放入列表中,因此我知道它不匹配。当我只有1个正则表达式时,我的方法有效,但是当我添加2个或更多时,我的方法完全退出工作。
public List<string> CheckNames(List<string> nameList, List<string> regexList)
{
var missMatchNameList = new List<string>();
foreach (var name in nameList)
{
foreach(var regex in regexList)
{
if (!Regex.IsMatch(name, regex))
{
missMatchNameList.Add(name);
break;
}
}
}
return missMatchNameList;
}
到目前为止,这是我的代码,我在这里错过了什么?任何提示都很棒!
答案 0 :(得分:1)
更改此
foreach (var name in nameList)
{
foreach(var regex in regexList)
{
if (!Regex.IsMatch(name, regex))
{
missMatchNameList.Add(name);
break;
}
}
}
收件人
foreach (var name in nameList)
{
bool match = false;
foreach(var regex in regexList)
{
if (Regex.IsMatch(name, regex))
{
match = true;
break;
}
}
if (match = false)
missMatchNameList.Add(name);
}
您的问题是,即使您其中一个正则表达式表达式不匹配,它也会被添加到列表中,即使它与另一个正则表达式匹配也是如此。
此外,通过保留break;
,您不会在找到匹配项后继续处理所有其他正则表达式。
答案 1 :(得分:0)
尝试这个
public List<string> CheckNames(List<string> nameList, List<string> regexList)
{
var missMatchNameList = new List<string>();
foreach (var name in nameList)
{
var matched = false;
foreach(var regex in regexList)
{
if (Regex.IsMatch(name, regex))
{
matched=true;
break;
}
}
if (!matched)
{
missMatchNameList.Add(name);
}
}
return missMatchNameList;
}
此问题是因为您在与第一个正则表达式不匹配时会中断,因此您无法比较其余正则表达式