C# 删除未使用的(空)HTML标记

C# 删除未使用的(空)HTML标记,c#,regex,replace,html-agility-pack,C#,Regex,Replace,Html Agility Pack,我正在寻找清除/删除所有HTML标记的方法,因为它们什么都没有 例如: <p></p><div> to make links</div><b> </b> <a href="http://foo.com"></a><p> for linebreak add 2 spaces at end </p><strong></strong><i><

我正在寻找清除/删除所有HTML标记的方法,因为它们什么都没有

例如:

<p></p><div> to make links</div><b> </b>
<a href="http://foo.com"></a><p> for linebreak add 2 spaces at end
</p><strong></strong><i></i>
创建链接的

对于换行符,在末尾添加2个空格
致:

要为换行符创建链接,请在末尾添加两个空格


//我确信它并不复杂。

使用此QA作为起点(),我们有regex
公共静态字符串RemoveUnusedTags(此字符串源代码)
{

return Regex.Replace(source,@“您可以使用如下正则表达式:

<(\w+)\s*.*?>\s*?</\1>
\s*?

其思想是查找包含空值的标记(带或不带属性)。对于您添加的示例输入,输出为:

<div> to make links</div>
<p> for linebreak add 2 spaces at end
</p>
创建链接
对于换行符,在末尾添加2个空格

]*>\s*]*>
尝试此操作。这将删除空标记。请参阅演示


所以,您实际上并不是在寻找一个正则表达式来解决这个问题,对吗?因为我们知道这将如何进行:@BradleyDotNET我觉得删除空元素实际上是正则表达式的一种有效用法。@Dai请随意回答。当我试图使用正则表达式来解决问题时,我通常会遇到两个问题:)我个人认为这是一个坏主意:如果你删除空标记,它会被击倒。CSS/Javascript可能会以Regex无法理解的方式使用空标记。这不会对所有内容都有效。只是为了澄清,该答案的作者指出,可能存在空的HTML,但与此Regex不匹配。
public static string RemoveUnusedTags(this string source)
{
    return Regex.Replace(source, @"<(\w+)\b(?:\s+[\w\-.:]+(?:\s*=\s*(?:""[^""]*""|'[^']*'|[\w\-.:]+))?)*\s*/?>\s*</\1\s*>", string.Empty, RegexOptions.Multiline);
}
<(\w+)\s*.*?>\s*?</\1>
<div> to make links</div>
<p> for linebreak add 2 spaces at end
</p>
<[^>]*>\s*<\/[^>]*>