电子邮件地址中[at]的正则表达式模式

时间:2014-02-22 18:43:53

标签: c#

我想从字符串中的html代码中提取电子邮件“myemail [at] domainemail [dot] com”。

所以我使用了这段代码,但它没有用。我该怎么办?

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;
}    

2 个答案:

答案 0 :(得分:1)

请勿使用正则表达式处理电子邮件。电子邮件RFC为电子邮件定义了一些非常复杂的规则。

而是在try catch中使用MailAddres类并包装构造函数。将解析邮件地址的繁重工作留给.NET FCL。

如果MailAddress类的构造函数没有失败,那么您有一个常规的电子邮件地址,您可以提取各种电子邮件部分。

答案 1 :(得分: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);