C# - 在标记之间删除HTML源代码中的空格?

use*_*ser 5 html c# whitespace

我目前正在开发一个程序,允许我将HTML源代码输入到RichTextBox控件中,并从标记之间删除空格.唯一的问题是,我不确定如何区分标记之间的空格和标记内的空格.显然,删除标记内的空格会很糟糕.关于我如何辨别差异的任何想法?

示例:(在移除空格之前)

<p>blahblahblah</p>                  <p>blahblahblah</p>
Run Code Online (Sandbox Code Playgroud)

示例:(删除空格后)

<p>blahblahblah</p><p>blahblahblah</p>
Run Code Online (Sandbox Code Playgroud)

Zie*_*ied 9

在链接的解决方案,Rasik送到这里它是一个解决方案,你也

Regex.Replace(html, @"\s*(<[^>]+>)\s*", "$1", RegexOptions.Singleline);
Run Code Online (Sandbox Code Playgroud)

常规采用标记原样和周围空格字符并用标记更改它.

编辑: 一个适用于Micheal示例的更好的解决方案

Regex.Replace(txtSource.Text,
            @"\s*(?<capture><(?<markUp>\w+)>.*<\/\k<markUp>>)\s*", "${capture}", RegexOptions.Singleline);
Run Code Online (Sandbox Code Playgroud)

这个正则表达式将检测标记标记,不要改变它的内部并删除空格.还有其他一些案例可供选择.就像没有结束标记的标记一样.


Car*_*l G 5

我正在使用以下内容。我的头顶上,缺点是没有处理HTML注释和CDATA内的括号。HTML中是否还有其他不表示标签的尖括号?

public static class HtmlHelper
{
    // positive look behind for ">", one or more whitespace (non-greedy), positive lookahead for "<"
    private static readonly Regex InsignificantHtmlWhitespace = new Regex(@"(?<=>)\s+?(?=<)");

    // Known not to handle HTML comments or CDATA correctly, which we don't use.
    public static string RemoveInsignificantHtmlWhiteSpace(string html)
    {
        return InsignificantHtmlWhitespace.Replace(html, String.Empty).Trim();
    }
}
Run Code Online (Sandbox Code Playgroud)