0

正規表現を使用した文字列の準備に問題があります。私はこの関数を書きました:

    private String parseAnswer(String res)
    {
        String[] pattern = new String[16] { "<head[^>]*?>.*?</head>", "<style[^>]*?>.*?</style>", "<script[^>]*?.*?</script>", "<object[^>]*?.*?</object>", "<embed[^>]*?.*?</embed>", "<applet[^>]*?.*?</applet>", "<noframes[^>]*?.*?</noframes>", "<noscript[^>]*?.*?</noscript>", "<noembed[^>]*?.*?</noembed>", "</?((address)|(blockquote)|(center)|(del))", "</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))", "</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))", "</?((table)|(th)|(td)|(caption))", "</?((form)|(button)|(fieldset)|(legend)|(input))", "</?((label)|(select)|(optgroup)|(option)|(textarea))", "</?((frameset)|(frame)|(iframe))" };
        String[] replacement = new String[16] { " ", " ", " ", " ", " ", " ", " ", " ", " ", "\n$0", "\n$0", "\n$0", "\n$0", "\n$0", "\n$0", "\n$0" };

        for (int i = 0; i < pattern.Length; i++)
        {
            res = Regex.Replace(res, pattern[i], replacement[i]);
        }

        return res;
    }

この関数は、HTMLのコードを入力として取得します。いくつかのHTMLタグをクリアしたい。それを行うために、私はパターンの配列を準備します。しかし、私の関数はHTMLのコードをクリアしていないようです。私のパターンは、削除したいHTMLタグのリストです。一部のタグは削除せず、追加するだけです\n。

この正規表現を手伝ってくれませんか。または、それを実行するためのライブラリを教えてください。私の目的は、解析するWebサイトのテキストのみを受信するようにHTMLタグを削除することです。

編集:わかりました。HTMLAgilityPackを使用できますが、いくつか質問があります。htmlDoc.LoadHtml(URL); -結果をUTF8に変換する必要があります->HTMLAgilityPackには変換する関数がありますか?次に、一般的に、InnerTextをJsonに配置して、Javascriptに送信したいと思います。Javascriptで禁止されているcharを削除するにはどうすればよいですか?

4

1 に答える 1

6

Regex特にさまざまなソースからのHTML を解析するには、不適切な選択になる傾向があります。

代わりに、 HTML Agility Packのような専用のパーサーを使用することをお勧めします。

Html Agility Pack (HAP) とは正確には何ですか?

これは、読み取り/書き込み DOM を構築し、プレーンな XPATH または XSLT をサポートするアジャイル HTML パーサーです (実際には、使用するために XPATH や XSLT を理解する必要はありません。心配はいりません...)。これは、「Web から」HTML ファイルを解析できる .NET コード ライブラリです。パーサーは、「実際の」不正な HTML に対して非常に寛容です。オブジェクト モデルは、System.Xml を提案するものと非常に似ていますが、HTML ドキュメント (またはストリーム) 用です。

ソースのダウンロードには、ライブラリをさまざまなタスクに使用する方法を文書化した多数のサンプル プロジェクトが付属しています。

于 2012-08-29T10:09:10.057 に答える