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

时间:2018-07-17 17:25:34

标签: c# .net regex

我正在尝试将多个字符串与正则表达式列表进行比较。我试图做到这一点,这样我就可以将我拥有的所有字符串与所有正则表达式进行比较,如果它不匹配任何正则表达式,那么它将被放入列表中,因此我知道它不匹配。当我只有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;
    }

到目前为止,这是我的代码,我在这里错过了什么?任何提示都很棒!

2 个答案:

答案 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;

        }

此问题是因为您在与第一个正则表达式不匹配时会中断,因此您无法比较其余正则表达式