1

如何使用 Html Agility Pack + c# 将文本中的 url 转换为 html 链接?

例如:“www.stackoverflow.com 是一个非常酷的网站。”

输出:

"<a href="www.stackoverflow.com">www.stackoverflow.com</a>  is a very cool site."
4

2 回答 2

3

感谢@user1778606 的回答。尽管它仍然使用了一些正则表达式,但我得到了这个工作。它工作得更好更安全(即它永远不会在超链接和 href 属性中创建超链接)。

        //convert text to html
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(inputString);

        // \w* - means it can start with any alphanumeric charactar
        // \s+ - was placed to replace all white spaces (when there is more than one word).
        // \b - set bounderies for the keyword
        const string pattern = @"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)";

        //get all elements text propery except for anchor element 
        var nodes = doc.DocumentNode.SelectNodes("//text()[not(ancestor::a)]") ?? new HtmlAgilityPack.HtmlNodeCollection(null);

        foreach (var node in nodes)
        {
            Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
            node.InnerHtml = regex.Replace(node.InnerHtml, "<a href=\"$1\">$1</a>").Replace("href=\"www", "href=\"http://www");
        }

        return doc.DocumentNode.OuterHtml;
于 2013-03-25T13:11:50.217 回答
0

我很确定它是可能的,虽然我没有尝试过。

以下是如何用链接替换文档中的固定字符串

当关键字匹配某些条件时在文本中查找关键字 - C#

继承人如何正则表达式的网址

url 的正则表达式

把它们放在一起,它应该是可能的。

伪代码

选择所有文本节点

对于每个节点

为找到的每个 url 获取内部文本
在文本中查找 url(使用正则表达式?)

用字符串文字链接标记替换 url 的文本(a href = etc ...)

于 2013-03-24T00:35:06.710 回答