使用Html Agility Pack從文本內容創建Html鏈接

c# html-agility-pack

如何使用Html Agility Pack + c#將文件從文本轉換為HTML鏈接?

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

輸出:

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

一般承認的答案

感謝@ 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;

熱門答案

我很確定它有可能,雖然我沒有嘗試過。

以下是如何使用鏈接替換文檔中的固定字符串

關鍵字匹配特定條件時在文本中查找關鍵字 - C#

繼承人如何為網址正則表達式

url的正則表達式

把它們放在一起,它應該是可能的。

偽代碼

選擇所有文本節點

對於每個節點

得到內在的文本
在文本中找到網址(使用正則表達式?)
找到每個網址

用字符串文字鏈接標記替換url的文本(href = etc ...)




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因