2011-04-18 215 views
0

是否可以使用正則表達式來刪除特定HTML塊內的HTML標記?使用正則表達式刪除HTML

E.g.

<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 2011-04-18 10:10:32

+4

我必須向您提及涉及HTML和正則表達式的任何問題的規範答案:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454# 1732454 – 2011-04-18 10:12:58

+0

@Andrew - 當然是我最喜歡的回答 - 我想所有的SE最喜歡的答案:-) – 2011-04-18 10:19:51

回答

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的無處不在的SO問題,並參閱@ Bruno對更強大解決方案的回答。

1

我發現這個鏈接中,它似乎確切有人問

「我有一個包含在.txt格式的HTML文檔的多個表和其他文本,我想內刪除任何HTML(任何」 <>「),如果它是一個表內(之間),例如:」

Regex to delete HTML within <table> tags

0

可能在一定程度上,但不可靠的!

我寧願建議你看看HTML解析器,如HTML Agility Pack