Html Agility Packを使用してテキストURLから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。私はまだRegexのビットを使用していますが、これは動作します。それははるかに良く、より安全に機能します(つまり、ハイパーリンクと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正規表現の方法をHeres

URLの正規表現

それらをまとめるとそれが可能になるはずです。

擬似コード

すべてのテキストノードを選択

各ノードごとに

内側のテキストを取得する
テキスト内のURLを見つける(regexを使う?)
見つかったURLごとに

URLのテキストを文字列リテラルリンクタグ(a href = etc ...)に置き換えます。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ