1

ドキュメントから HTML タグを削除する効率的で (合理的に) 信頼できる方法が必要です。いくつかのかなり不利な状況を処理できる必要があります。

  • ドキュメントに HTML が含まれているかどうかは、事前にはわかりません。
  • ほとんどの場合、HTML のフォーマットは非常に貧弱です。
  • 個々のドキュメントは非常に大きく、おそらく数百メガバイトになる場合があります。
  • HTML 以外のコンテンツには、奇妙な理由でまだ山括弧が散らばっている可能性があるため、 の行に沿った単純な正規表現は使用<.+/?>できません。(とにかく、XML を削除することはあまり望ましくありません。)

私は現在、HTML Agility Pack を使用しています。パフォーマンスは思ったよりも悪く、本当にひどい書式設定をできる限り適切に処理できるとは限りません。最近、いくつかの非常に大きなファイルでスタック オーバーフローが発生するという問題に直面しています。

これらの問題はすべて、実際にデータを解析しようとしているという事実に起因していると思われます。そのため、私のニーズにはあまり適合しません。構文ツリーは必要ありません。(ほとんどの) タグをなくしたいだけです。

正規表現の使用は明らかな候補のようです。しかし、この有名な答えを思い出すと、それはそれほど素晴らしいアイデアではないのではないかと心配になります。しかし、そのdiatribeのポイントは解析に非常に焦点を当てており、必ずしもばかげたタグの削除ではありません。この目的のために正規表現はOKですか?

それがひどい考えではないと仮定すると、良い仕事をする正規表現の提案は大歓迎です。

4

2 に答える 2

1

この正規表現は、タグ内の引用符内の山括弧を回避するすべてのタグを検索します。

<[a-zA-Z0-9/_-]+?((".*?")|([^<"']+?)|('.*?'))*?>

引用符内のエスケープされた引用符を検出できません (ただし、html では不要だと思います)。

許可されたすべてのタグのリストを取得し、正規表現の最初の部分でそれを置き換えると<(tag1|tag2|...)、より正確な解決策が得られる可能性があります。たとえば、山かっこに関する仮定から始めて、正確な解決策が見つからないのではないかと思います。のようなものに<a href="test.html"> b<a </a>...

編集

更新された正規表現 (後者よりもはるかに優れたパフォーマンス)。さらに、コードを削除する必要がある場合は、最初の起動前に少しクリーンアップを実行することをお勧めします<script.+?</script>

于 2012-08-16T15:02:31.120 に答える
1

ここでは枠にとらわれずに考えているだけですが、Microsoft Word や OpenOffice などを活用することを検討してください。

Word オートメーションを使用して、HTML を DOC、RTF、または TXT に変換しました。Word ネイティブの HTML から TXT への変換は、すべての HTML タグを取り除き、テキスト形式に変換することで、必要なものを正確に提供します。もちろん、大量の小さな HTML ファイルを処理している場合、これらすべてにオーバーヘッドがあるため、これはまったく効率的ではありません。しかし、大量のファイルを扱っている場合、これは悪い選択ではないかもしれません。なぜなら、Word にはこれらの変換に関して多くの最適化があると確信しているからです。Word で最大の HTML ファイルの 1 つを手動で開き、それを TXT ファイルとして再保存して、Word が保存するのにかかる時間を確認することで、この理論をテストできます。

私は試したことはありませんが、プログラムで OpenOffice とやり取りして、同様のことを実現できるはずです。

于 2012-08-16T15:14:39.413 に答える