是否可以使用正则表达式来删除特定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