私は特殊な HTML ストリッパーに取り組んでいます。現在のストリッパーは <td> タグをタブに置き換え、次に <p> および <div> タグを二重の改行に置き換えます。ただし、次のようにコードを削除する場合:
<td>First Text</td><td style="background:#330000"><p style="color:#660000;text-align:center">Some Text</p></td>
それは(明らかに)生成します
First Text
Some Text
この場合、 <p> を何も置き換えないようにしたいので、次のようになります。
First Text (tab) Some Text
ただし、 <p> タグが <td> タグで囲まれていない他のコードでは、ダブル キャリッジ リターンの置換を維持したいと考えています。
基本的に、 <td> タグは常に \t に置き換え、 <p> および <div> タグは <td> タグで囲まれていない場合のみ \r\r に置き換えようとしています。
現在のコード: (C#)
// insert tabs in places of <TD> tags
result = System.Text.RegularExpressions.Regex.Replace(result,
@"<td\b(?:[^>""']|""[^""]*""|'[^']*')*>", "\t",
System.Text.RegularExpressions.RegexOptions.IgnoreCase);
// insert line paragraphs (double line breaks) in place
// of <P>, <DIV> and <TR> tags
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 に置き換え、複数のタブを処理することです。カスタム ストリップ コード。