2


0

私は専門のHTMLストリッパーに取り組んでいます。 現在のストリッパーが置き換えられます

タブ付きのタグ

そして

二重改行を含むタグ。 ただし、次のようなコードを削除すると、

最初のテキスト

いくつかのテキスト

それは(明らかに)作り出す

最初のテキスト

いくつかのテキスト

我々は持っていたいのですが

この場合は何も置き換えられないので、次のようになります。

最初のテキスト(タブ)いくつかのテキスト

ただし、二重キャリッジリターンを他のコードの代わりに使用したい場合は、

タグはで囲まれていません

タグ

基本的には、置き換えようとしています

常に\ tのタグ

そして

で囲まれていない場合のみ、\ r \ rのタグ

タグ

現在のコード:(C#)

//タグの代わりにタブを挿入する"、" \ t "、System.Text.RegularExpressions.RegexOptions.IgnoreCase);

//行の段落(二重改行)を//の代わりに挿入し、// result = System.Text.RegularExpressions.Regex.Replace(result、@ "<(div | tr | p)\ b(?:[^>)のタグを付けます。 "" '] | "" [^ ""] * "" |' [^ '] *')*> "、" \ r \ r "、System.Text.RegularExpressions.RegexOptions.IgnoreCase);

(ストリッパーにはもっとコードがあります。これは関連部分です)

ストリッパー全体を完全に書き直さずにこれを行う方法について何かアイデアはありますか?

編集:私は、法的な問題は言うまでもなく、サインオフしてプロジェクトに含める(それ自体が別のプロジェクトに含まれるライブラリです)という頭痛のため、ライブラリを使用しないことを望みます。 他に解決策がない場合は、HTML Agility Packを使用します。

ほとんどの場合、ストリッパーはタグのように見えるものをすべて取り除きます(Regular Expressions Cookbookの正規表現に基づいた大きな正規表現で行われます)。 これは、改行タグを/ rに置き換え、複数のタブを扱うことがカスタムストリッピングコードの矛盾です。

4 Answer


2


あなたは HTML Agility Packを調べることを考えましたか?


2


答えが見つかりました:

// tdのresultの中のp / div / trを削除する= System.Text.RegularExpressions.Regex.Replace(result、@ "" "'] |" "[^" "] *" "|' [^ '] *' )*>。*? "" '] | "" [^ ""] * "" |' [^ '] *')*> "、新しいMatchEvaluator(RemoveTagsWithinTD));

このコードは、一致ごとにこの個別のメソッドを呼び出します。

//別のメソッドプライベート静的文字列""] * "" | '[^'] * ')*> "、" "); }

このコードは(ここでも) Regeular Expressions Cookbook(これまでずっと私の前に座っていました)の別のレシピに基づいています。 それは本当に素晴らしい本です。


0


私はそれを正規表現で書く限り答えがありません、しかし私はこのような何かのために HTML Agility Packを強くお勧めします。 あなたは簡単なセレクタで簡単にノードを見つけて、あなたが望むものにそれらを単に置き換えることができるはずです。


0


あなたがアジリティパックを使えないのであれば。 ブロックの存在をチェックする単純一致を作成した場合はどうなりますか。 存在する場合は、ブロック内のタグに対してすべて適切な置換を実行できます。それ以外の場合は、ブロック内にないタグに対して機能する2番目の置換セットを使用できます。

既存の代替品を書き直す必要はありません。他の条件用にもう1つ単純な代替品を作成するだけです。 これは、HTMLストリッピングの1単位で解析されるテキスト量によって異なります。