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 を検索します (正規表現を使用しますか?)

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

于 2013-03-24T00:35:06.710 に答える