C# 如何从html链接中提取电子邮件
嗨,我有一个csv文件,我需要格式化(列)电子邮件,他们在csv如下C# 如何从html链接中提取电子邮件,c#,C#,嗨,我有一个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>" 我建议使用HtmlAgilityPack,而不是自己解析它: HtmlDocument doc = new HtmlDocument()
<a href=\mailto:john@domain.com\">john@domain.com</a>"
<a href=\mailto:dave.h@domain22.co.uk\">dave.h@domain22.co.uk</a>"
我建议使用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..
}
如果要以索引方式进行,请执行以下操作:
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);
const string start=“\”;
int index1=asd1.IndexOf(开始);
int startPosition=index1+start.Length;
int endPosition=asd1.IndexOf(结束);
字符串email=asd1.Substring(startPosition,endPosition-startPosition);
您可以在此处测试正则表达式:
以你的例子来说,这似乎是可行的:
mailto:(.*?)\\">
正则表达式所需的库是:
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(“>”,“您必须使用第二个地址吗?使用第一个地址会更简单,并且在您的示例中它们是相同的。您是否对子字符串和正则表达式进行过任何研究?获取“>”符号的索引,然后获取"第二个地址将是下一行是的,我猜使用remove everything before and Include>然后使用everything after and Include<我以前没有使用索引方法,simple?IndexOf
使用字符
而不是字符串这是不可预测的。
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(">", "<");