我想从字符串中的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;
}
答案 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);