2014-02-22 324 views
0

我想從字符串中的html代碼中提取電子郵件「myemail [at] domainemail [dot] com」。正則表達式在[at]中的電子郵件地址

所以我用這個代碼,但它不工作。我該怎麼辦 ?

public static List<string> Fetch_Emails(string Sourcecode) 
{ 
    List<string> Emails = new List<string>();  

    Regex exp = new Regex("\\b[A-Z0-9._%+-]+(\\[at\\])[A-Z0-9.-]+(\\[dot\\])[A-Z]{2,4}\\b", RegexOptions.IgnoreCase); 
      MatchCollection matchCollection = exp.Matches(Sourcecode); 

    foreach (Match m in matchCollection) 
    { 
     if (!Emails.Contains(m.Value)) 
     { 
      Emails.Add(m.Value);       
     } 
    } 

    return Emails; 
}  
+0

沒有針對此問題沒有_simple_正則表達式。見LB鏈接的問題 – Krease

回答

1

請勿使用正則表達式來處理電子郵件。電子郵件RFC定義了一些非常複雜的電子郵件規則。

寧可使用MailAddres類和包裝構造函數在try catch中。將解析郵件地址解析爲.NET FCL。

如果MailAddress類的構造函數沒有失敗,那麼你有一個普通的電子郵件地址,你可以提取各種電子郵件部分。

0

您的圖案不支持在電子郵件組件和[at][dot]之間留有空格。

要添加空間支持,請使用[ ]{0,3}在組件之間允許0到3個空格。

\b[A-Z0-9._%+-]+[ ]{0,3}(\[at\])[ ]{0,3}[A-Z0-9.-]+[ ]{0,3}(\[dot\])[ ]{0,3}[A-Z]{2,4}\b 

此外,而不是逃避的正則表達式,使用C#字符串文字:

Regex exp = new Regex(@"\b[A-Z0-9._%+-]+[ ]{0,3}(\[at\])[ ]{0,3}[A-Z0-9.-]+[ ]{0,3}(\[dot\])[ ]{0,3}[A-Z]{2,4}\b", RegexOptions.IgnoreCase); 
相關問題