如何从html链接

时间:2015-08-14 21:09:06

标签: 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>"

等...

所以我想删除<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
                            }

4 个答案:

答案 0 :(得分:3)

我建议使用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..
}

答案 1 :(得分:0)

您可以在此处测试正则表达式: https://regex101.com/

使用您的示例,这似乎有效:

mailto:(.*?)\\">

正则表达式所需的库是:

using System.Text.RegularExpressions;

答案 2 :(得分:-1)

如果你想以索引方式进行,例如:

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

答案 3 :(得分:-1)

我经常写自己的小实用程序类和扩展来处理这样的事情。由于这可能不是你最后一次做这样的事情,你可以这样做:

创建字符串类的扩展名:

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(">", "<");