2013-02-20 107 views
1

我需要帮助最小化代码。我必须检查两个不同的maches,并且需要将它们存储在同一个matchcollection中。我不知道该怎么做,这里是我的代码,请任何人都帮助我这么做。如何创建matchcollection数组

var patternEmail = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; 
MatchCollection emailCollection1; 

//Get emails from ResponsibleConsultant 
emailCollection1 = Regex.Matches(piWorkitem.ResponsibleConsultant, patternEmail); 
foreach (Match mail in emailCollection1.Cast<Match>().Where(mail => !emailaddresses.Contains(mail.Value.ToString()))) 
{ 
    emailaddresses.Add(mail.Value); 
} 

MatchCollection emailCollection2; 

//Get emails from ResponsibleConsultant 
emailCollection2 = Regex.Matches(piWorkitem.SupplierConsultant, patternEmail); 
foreach (Match mail in emailCollection2.Cast<Match>().Where(mail => !emailaddresses.Contains(mail.Value.ToString()))) 
{ 
    emailaddresses.Add(mail.Value); 
} 

帮助我避免重复代码不止一次。

+2

使包含逻辑函数,然后重新使用该功能。 – Raptor 2013-02-20 06:04:46

回答

2
var patternEmail = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; 
var allInput = piWorkitem.ResponsibleConsultant + " " + piWorkitem.SupplierConsultant; 
var emailCollection = Regex.Matches(allInput , patternEmail); 
foreach (Match mail in emailCollection.Cast<Match>().Where(mail => emailaddresses.Contains(mail.Value.ToString()))) 
{ 
    emailaddresses.Add(mail.Value); 
} 
+0

你让我的工作变得非常简单,非常感谢 – user1845163 2013-02-20 06:26:37

0

你可以加入这两种使用Union

试试这个结果:

var patternEmail = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; 

    var emailCollection1 = Regex.Matches(piWorkitem.ResponsibleConsultant, patternEmail).Cast<Match>().Union(Regex.Matches(piWorkitem.SupplierConsultant, patternEmail).Cast<Match>()); 
    foreach (Match mail in emailCollection1.Where(mail => !emailaddresses.Contains(mail.Value.ToString()))) 
    { 
     emailaddresses.Add(mail.Value); 
    } 
+0

非常感谢你 – user1845163 2013-02-20 06:27:04

0
private void TestFunc() 
    { 
     var patternEmail = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; 

     var all = ExtactMatches(patternEmail, piWorkitem.SupplierConsultant, piWorkitem.ResponsibleConsultant); 
    } 

    private IEnumerable<string> ExtactMatches(string pattern, params string[] srcText) 
    { 
     HashSet<string> emailaddresses = new HashSet<string>(); 

     foreach (var text in srcText) 
     { 
      //Get emails from ResponsibleConsultant 
      var emailCollection1 = Regex.Matches(text, pattern); 
      foreach (Match mail in emailCollection1.Cast<Match>().Where(mail => !emailaddresses.Contains(mail.Value.ToString(CultureInfo.InvariantCulture)))) 
      { 
       emailaddresses.Add(mail.Value); 
      } 
     } 
     return emailaddresses; 
    } 
+0

非常感谢你 – user1845163 2013-02-20 06:42:29