【问题标题】:Remove HTML with Regex使用正则表达式删除 HTML
【发布时间】:2017-11-28 23:17:14
【问题描述】:

是否可以使用正则表达式来删除特定 HTML 块中的 HTML 标签?

例如

<body>

<p>Hello World!</p>

<table>
    <tr>
        <td> 
          <p>My First HTML Table</p>
        </td>
    </tr>
</table>

我不想删除所有 P 标记,只删除表格元素中的那些。

删除或保留嵌套 p 标记内的文本的能力将是理想的。

谢谢。

【问题讨论】:

  • 在特定的 HTML 块内?当然。 s[&lt;p&gt;My First HTML Table&lt;/p&gt;][My First HTML Table] — 但对于任何通用解决方案,请使用真正的 HTML 解析器。
  • 我必须向您推荐任何涉及 HTML 和正则表达式的问题的规范答案:stackoverflow.com/questions/1732348/…
  • @Andrew - 当然是我最喜欢的答案 - 我猜是所有 SE 最喜欢的答案 :-)

标签: asp.net html regex


【解决方案1】:

很多人提到在解析 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();
}

所以在所有这些操作之后,你会得到下一个result

<body>

<p>Hello World!</p>

<table>
    <tr>
        <td> 
          My First HTML Table
        </td>
    </tr>
</table></body>

【讨论】:

    【解决方案2】:

    我发现这个链接似乎问了确切的问题

    “我有一个 .txt 格式的 HTML 文档,其中包含多个表格和其他文本,如果它位于表格内(和 之间),我正在尝试删除任何 HTML(“”内的任何内容)。例如:“

    Regex to delete HTML within <table> tags

    【讨论】:

      【解决方案3】:
      <td>[\r\n\s]*<p>([^<]*)</p>[\r\n\s]*</td>
      

      圆括号表示将包含您的文本的编号捕获组。

      但是,以这种方式使用正则表达式依赖于很多关于 &lt;p&gt; 标记内容和 HTML 构造的假设。

      阅读关于using regular expressions to parse (X)HTML 的无处不在的 SO 问题,并查看@Bruno 的答案以获得更可靠的解决方案。

      【讨论】:

        【解决方案4】:

        在某种程度上可能但不可靠!

        我宁愿建议您查看 HTML 解析器,例如 HTML Agility Pack

        【讨论】:

          猜你喜欢
          • 2010-10-20
          • 2019-11-25
          • 2019-02-16
          • 2010-10-21
          • 1970-01-01
          • 2011-05-02
          • 1970-01-01
          • 2011-04-16
          • 2020-12-04
          相关资源
          最近更新 更多