是否可以使用正則表達式來刪除特定HTML塊內的HTML標記?使用正則表達式刪除HTML
E.g.
<body>
<p>Hello World!</p>
<table>
<tr>
<td>
<p>My First HTML Table</p>
</td>
</tr>
</table>
我不想刪除所有P標籤,只有那些在表格元素中的標籤。
同時刪除或保留嵌套p標籤內的文本的能力將是理想的。
謝謝。
是否可以使用正則表達式來刪除特定HTML塊內的HTML標記?使用正則表達式刪除HTML
E.g.
<body>
<p>Hello World!</p>
<table>
<tr>
<td>
<p>My First HTML Table</p>
</td>
</tr>
</table>
我不想刪除所有P標籤,只有那些在表格元素中的標籤。
同時刪除或保留嵌套p標籤內的文本的能力將是理想的。
謝謝。
有很多關於提到不使用正則表達式解析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>
<td>[\r\n\s]*<p>([^<]*)</p>[\r\n\s]*</td>
圓括號表示一個編號的捕獲組,其中將包含您的文本。
但是,以這種方式使用正則表達式依賴於很多關於<p>
標記內容和HTML構造的假設。
閱讀關於using regular expressions to parse (X)HTML的無處不在的SO問題,並參閱@ Bruno對更強大解決方案的回答。
我發現這個鏈接中,它似乎確切有人問
「我有一個包含在.txt格式的HTML文檔的多個表和其他文本,我想內刪除任何HTML(任何」 <>「),如果它是一個表內(之間),例如:」
可能在一定程度上,但不可靠的!
我寧願建議你看看HTML解析器,如HTML Agility Pack。
在一個特定的HTML塊內?當然。 [
我的第一個HTML表格
] [我的第一個HTML表] - 但對於任何一般的解決方案,請使用真正的HTML解析器。 – Quentin 2011-04-18 10:10:32我必須向您提及涉及HTML和正則表達式的任何問題的規範答案:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454# 1732454 – 2011-04-18 10:12:58
@Andrew - 當然是我最喜歡的回答 - 我想所有的SE最喜歡的答案:-) – 2011-04-18 10:19:51