如何从html链接提取电子邮件
本文关键字:提取 电子邮件 链接 html | 更新日期: 2023-09-27 18:08:12
你好,我有一个csv文件,我需要格式化(列)电子邮件,他们在csv如下
<a href='mailto:john@domain.com'">john@domain.com</a>"
<a href='mailto:dave.h@domain22.co.uk'">dave.h@domain22.co.uk</a>"
等等……
所以我想删除<a href='mailto:john@domain.com'"> </a>"
,只使用john@domain.com
我有以下
foreach (var clientI in clientImportList)
{
newClient = new DomainObjects.Client();
//Remove unwanted email text??
newClient.Email = clientI.Email
}
我建议使用HtmlAgilityPack,不要自己解析它:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
string href = link["href"].Value;
// use "mailto:john@domain.com" here..
}
你可以在这里测试正则表达式:https://regex101.com/
用你的例子,这似乎是有效的:
mailto:(.*?)''">
regex所需的库是:
using System.Text.RegularExpressions;
我通常自己编写一些实用程序类和扩展来处理这类事情。因为这可能不是你最后一次做这样的事情,你可以这样做:
创建string类的扩展:
public static class StringExtensions
{
public static string ExtractMiddle(this string text, string front, string back)
{
text = text.Substring(text.IndexOf(front) + 1);
return text.Remove(text.IndexOf(back));
}
}
然后这样做(可以使用更好的命名,但你明白了):
string emailAddress = text.ExtractMiddle(">", "<");
如果你想按照索引的方式来做,比如:
const string start = "<a href=''mailto:";
const string end = "'''">";
string asd1 = "<a href=''mailto:john@domain.com'''">john@domain.com</a>'"";
int index1 = asd1.IndexOf(start);
int startPosition = index1 + start.Length;
int endPosition = asd1.IndexOf(end);
string email = asd1.Substring(startPosition, endPosition - startPosition);