C# 如何从html链接中提取电子邮件

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()

嗨,我有一个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();
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(">", "<");