如何从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
                            }

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

我建议使用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);