2011-04-18 20 views
0

regexを使用して、特定のHTMLブロック内のHTMLタグを削除することはできますか?RegexでHTMLを削除する

など。

<body> 

<p>Hello World!</p> 

<table> 
    <tr> 
     <td> 
      <p>My First HTML Table</p> 
     </td> 
    </tr> 
</table> 

すべてのPタグを削除する必要はありません。テーブル要素内のタグのみを削除します。

ネストされたpタグ内のテキストを削除または保持する機能は理想的です。

ありがとうございました。

+0

HTMLの特定のブロック内には、確かに。 '[

私の最初のHTMLテーブル

] [私の最初のHTMLテーブル]' - しかし、一般的な解決策では、実際のHTMLパーサーを使用してください。 – Quentin

+4

HTMLと正規表現に関する質問に対する正式な回答を参照する必要があります:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454# 1732454 –

+0

@Andrew - 確かに私のお気に入りの答え - と私はすべてのSEの好きな答えを推測する:-) –

答えて

5

はたくさんのHTMLを解析する際に、あなたがこのためにHtml Agility Packを使用することができますので、正規表現を使用しないについての言及があります。

var html = @" 
<body> 

<p>Hello World!</p> 

<table> 
    <tr> 
     <td> 
      <p>My First HTML Table</p> 
     </td> 
    </tr> 
</table>"; 

HtmlDocument document = new HtmlDocument(); 
document.LoadHtml(html); 

var nodes = document.DocumentNode.SelectNodes("//table//p"); 
foreach (HtmlNode node in nodes) 
{ 
    node.ParentNode.ReplaceChild(
     HtmlNode.CreateNode(node.InnerHtml), 
     node 
    ); 
} 

string result = null; 
using (StringWriter writer = new StringWriter()) 
{ 
    document.Save(writer); 
    result = writer.ToString(); 
} 

だから、これらすべてのmanupulationsした後、あなたは次のresultを取得します:

<body> 

<p>Hello World!</p> 

<table> 
    <tr> 
     <td> 
      My First HTML Table 
     </td> 
    </tr> 
</table></body> 
1
<td>[\r\n\s]*<p>([^<]*)</p>[\r\n\s]*</td> 

丸括弧は、テキストを含む番号付きキャプチャグループを示します。

ただし、このように正規表現を使用すると、<p>タグの内容とHTMLの構成に関する多くの前提が使用されます。

using regular expressions to parse (X)HTMLに関する普遍的な質問を読んで、もっと頑強な解決策については@ Brunoの答えをご覧ください。

私は正確な質問は「私は複数のテーブルや他のテキストを含む.txt形式でHTMLドキュメントを持っていると私は任意のHTML(内何かを削除しようとしています」

を頼まれたらしいれ、このリンクを発見した
0
ある程度可能

ではなく、信頼性の高いです!

私はむしろHTML Agility PackのようなHTMLパーサを見ることを提案します。

関連する問題