【问题标题】:Regex to remove all spans from HTML keeping inner text as it is正则表达式从 HTML 中删除所有跨度,保持内部文本不变
【发布时间】:2015-10-11 23:43:10
【问题描述】:

我正在寻找一个可以删除所有跨度保持内部文本的正则表达式。我的内部 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>

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

我已经尝试过这个正则表达式 - (&lt;span.*([\r\n]).*&gt;)|(&lt;span.*&gt;)|(&lt;/span&gt;).

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

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

【问题讨论】:

  • 使用&lt;span\b[^&lt;&gt;]*&gt;|&lt;/span&gt;。或者 HtmlAgilityPack 以更合适的方式来做。
  • 请不要delete your question 重新提问,更新你原来的问题...
  • 您在上一个问题中给出了类似的链接:stackoverflow.com/questions/1732348/… 使用 html 解析器。不要使用正则表达式。

标签: c# html .net regex


【解决方案1】:

您可以使用 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);

这是输出:

如果您需要去除空白,您可以使用简单的String.ReplaceRegex.Replace 或 split/join 方法,具体取决于您的实际需要。

【讨论】:

  • 对于这种方法是否需要传递正确的 html。即带有 html 和 body 标签的字符串。
  • 我不这么认为。 myInputHtml 实际上是您发布的字符串。
  • 我从中得到的唯一问题是 HtmlAgility 将“<%T”转换为
  • 这是因为HtmlAgilityPack.HtmlEntity.DeEntitize 方法将实体转换为文字。那就用return doc.DocumentNode.InnerText;吧。
猜你喜欢
  • 2019-10-27
  • 1970-01-01
  • 2011-10-03
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多