C# 将多个字符串与正则表达式列表C进行比较#

C# 将多个字符串与正则表达式列表C进行比较#,c#,.net,regex,C#,.net,Regex,我试图将多个字符串与正则表达式列表进行比较。我试着让它,这样我可以比较所有的字符串,我有所有的正则表达式,如果它不匹配任何正则表达式,那么它会被放入一个列表,所以我知道它不匹配。当我只有1个正则表达式时,我的方法可以工作,但当我添加2个或更多正则表达式时,我的方法会完全停止工作 public List<string> CheckNames(List<string> nameList, List<string> regexList) {

我试图将多个字符串与正则表达式列表进行比较。我试着让它,这样我可以比较所有的字符串,我有所有的正则表达式,如果它不匹配任何正则表达式,那么它会被放入一个列表,所以我知道它不匹配。当我只有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;
    }
公共列表检查名(列表名称列表、列表regexList)
{
var missMatchNameList=新列表();
foreach(名称列表中的变量名称)
{
foreach(regexList中的var regex)
{
如果(!Regex.IsMatch(名称,Regex))
{
错误匹配名称列表。添加(名称);
打破
}  
}        
} 
返回错配名称列表;
}
到目前为止,这是我的代码,我在这里遗漏了什么??任何提示都很好

试试这个

  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;

        }
公共列表检查名(列表名称列表、列表regexList)
{
var missMatchNameList=新列表();
foreach(名称列表中的变量名称)
{
var匹配=假;
foreach(regexList中的var regex)
{
if(Regex.IsMatch(名称,Regex))
{
匹配=真;
打破
}  
}  
如果(!匹配)
{
错误匹配名称列表。添加(名称);
}  
} 
返回错配名称列表;
}
出现此问题是因为在与第一个正则表达式不匹配时中断,因此无法比较其余的正则表达式,请尝试使用此正则表达式

  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;

        }
公共列表检查名(列表名称列表、列表regexList)
{
var missMatchNameList=新列表();
foreach(名称列表中的变量名称)
{
var匹配=假;
foreach(regexList中的var regex)
{
if(Regex.IsMatch(名称,Regex))
{
匹配=真;
打破
}  
}  
如果(!匹配)
{
错误匹配名称列表。添加(名称);
}  
} 
返回错配名称列表;
}
此问题是因为您在与第一个正则表达式不匹配时中断,因此无法比较其余的正则表达式更改此设置

foreach (var name in nameList)
    {
      foreach(var regex in regexList)
      {
            if (!Regex.IsMatch(name, regex))
            {
                missMatchNameList.Add(name);
                break;
            }  
      }        
    } 

您的问题是,一旦其中一个正则表达式不匹配,它就会被添加到列表中,即使它与另一个正则表达式匹配

另外,通过保持
中断找到匹配项后,您不会继续处理所有其他正则表达式。

更改此选项

foreach (var name in nameList)
    {
      foreach(var regex in regexList)
      {
            if (!Regex.IsMatch(name, regex))
            {
                missMatchNameList.Add(name);
                break;
            }  
      }        
    } 

您的问题是,一旦其中一个正则表达式不匹配,它就会被添加到列表中,即使它与另一个正则表达式匹配



另外,通过保持
中断
找到匹配项后,您不会继续处理所有其他正则表达式。

删除
中断?@SebastianHofmann不幸的是,我试过了,但没有成功。与其说“完全停止工作”,不如告诉我们你传递给
CheckNames
的内容,它返回的内容,以及你期望它返回的内容。只是一个想法。如果你不在乎它与哪个正则表达式匹配,为什么不把你的正则表达式列表连接成一个长正则表达式,然后用ORs匹配这个正则表达式,而不是执行循环呢?我觉得它是有效的…下面的答案在逻辑上是等价的…其中一个命中了一个无效的正则表达式…你不需要检查restRemove the
break?@SebastianHofmann不幸的是,我试过了,但没有成功。与其说“完全停止工作”,不如告诉我们你传递给
CheckNames
的内容,它返回的内容,以及你期望它返回的内容。只是一个想法。如果你不在乎它和哪个正则表达式匹配,为什么不把你的正则表达式列表连接成一个带有OR的长正则表达式,然后与这个正则表达式匹配,而不是执行循环?我觉得它是有效的…下面的答案在逻辑上是等价的…其中一个命中了一个无效的…你不需要检查REST你真的用和我一样的注释更新了你的答案吗,然后加上中断声明,因为我发现很难相信你是通灵者!我没有看到你的代码我只是增强了我的代码,没有比较所有剩余的regexsDid你真的只是用与我相同的注释更新你的答案,然后添加中断语句,因为我发现很难相信你是通灵者!我没有看到你的代码我只是增强了我的代码以不比较所有剩余的正则表达式我认为
if
语句应该像
if(match==false)
,或者
if(!match)
…更新了!感谢您的反馈;0)我认为
if
语句应该看起来像
if(match==false)
,或者
if(!match)
…Updated!感谢您的反馈;0)