正则表达式从HTML中删除所有跨距,保持内部文本不变

时间:2015-07-22 08:07:16

标签: c# html .net regex

我正在寻找一个可以删除保留内部文本的所有跨度的正则表达式。我的内部HTML中有这种跨度。

输入

格式正确的HTML

 <span style='font-size:10.0pt;font-family:"Arial","sans serif"'**>
            First span
        </span>
        <span style="color:#221E1F;">
        <span style='font-size:10.0pt;font-family:"Arial";color:windowtext'>
        This is to test Regular expression
        </span>
        </span>
        <span style="color:#221E1F;"><span style='font-size:10.0pt;font-family:
                "Arial","sans-serif";color:#548DD4'>
        last Span  text
        </span>
        </span>

格式不正确:

 <span style='font-size:10.0pt;font-family:"Arial","sans-serif";
    mso-bidi-font-style:italic'>&lt;%T</span><span class="A1"><span style='font-size:
    10.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family:Calibri;
    mso-fareast-theme-font:minor-latin;color:windowtext'>PA_Enrollment_Options%&gt;
    one of the convenient options below</span></span><span class="A1"><span style='font-size:10.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family:
    Calibri;mso-fareast-theme-font:minor-latin;color:#548DD4;mso-themecolor:text2;
    mso-themetint:153'>: <o:p></o:p></span></span>

预期输出:第一个跨度这是测试正则表达式的最后一个跨度文本

我试过这个正则表达式 - (<span.*([\r\n]).*>)|(<span.*>)|(</span>).

当我的HTML格式正确时,这是有效的,但在我的情况下,HTML的缩进是不正确的。

我没有使用正则表达式来完全解析。我只在内部html中执行此操作

1 个答案:

答案 0 :(得分:3)

您可以使用HtmlAgilityPack正确执行此操作:

public string getCleanHtml(string html)
{
    var doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    // return HtmlAgilityPack.HtmlEntity.DeEntitize(doc.DocumentNode.InnerText); // Use if you want to convert HTML entities to their literal view
    return doc.DocumentNode.InnerText; // if you want to keep HTML entities
}

然后

var result = getCleanHtml(myInputHtml);

这是输出:

enter image description here

如果你需要摆脱空格,你可以使用简单的String.ReplaceRegex.Replace或分割/连接方法,具体取决于你真正需要的。