【问题标题】:REGEX - Find td with specific class, including nested tablesREGEX - 查找具有特定类的 td,包括嵌套表
【发布时间】:2009-07-09 12:57:55
【问题描述】:

我必须解析一段 HTML。 有点像:

<table>
   <tr>
     <td class="blabla"> <table><tr><td><table><tr><td></td></tr></table></td></tr></table>
     </td>
   </tr>
  <tr>
     <td class="blabla"> <table><tr><td></td></tr></table>
     </td>
   </tr>
</table>

我需要用blabla 类提取每个td,但这些单元格中的每一个都可以有0 个或多个嵌套表,其中包含许多嵌套的td。我想得到

<td class="blabla"> ... many nested stuff ... </td>

谢谢

【问题讨论】:

  • 你不清楚你想从这里返回什么

标签: .net html regex winforms


【解决方案1】:

不要尝试使用正则表达式解析 HTML。你不能编写一个匹配你想要的表达式,因为 HTML 不是正则的。

在您的语言提供的库中使用 HTML/XML 解析器。 System.Xml 有许多有用的类,可让您打开文件并使用 XPath 查询它。

您要查找的 XPath 表达式是

//td[@class="someClass"]

【讨论】:

  • 不确定 .net 的实现,但不会是 //td[@class="someClass"]
  • 这就是我们最后所做的。
【解决方案2】:

如果您需要进行扩展 html 解析,我建议您使用 Html Agility Pack 而不是正则表达式。 HAP 从 html 页面构建 xml 文档,因此您可以使用 XPath 查找特定节点。

【讨论】:

    【解决方案3】:

    为什么不使用 css 选择器?

    【讨论】:

    • 它在一个 .NET win 应用上,用于解析文本。
    • @Gidon:不要将 HTML 视为文本。
    【解决方案4】:

    ([tT][dD]\sclass=\"blabla\")

    【讨论】:

      【解决方案5】:

      您会寻找类似于 /&lt;td\sclass=\"(.*?)\"&gt;/ 的正则表达式,但我不知道如何在 .net 中执行此操作。

      但是,由于 HTML 的形成方式很糟糕,正则表达式不是解析的好选择。有更好的工具可以做到这一点。

      如前所述,使用 XPath 将是使用 //td[@class="someClass"] 实现此目的的好方法。这将为您提供 td 节点。然后您可以获取其中的内容并根据需要进行处理

      【讨论】:

        【解决方案6】:

        你不能仅仅使用正则表达式来做到这一点,因为它太复杂了。即使使用前瞻匹配,正则表达式也必须动态更改,因为您必须根据在您想要的 &lt;td&gt; 之后找到多少 &lt;td&gt; 来增加您正在寻找的 &lt;/td&gt; 的数量。

        【讨论】:

          猜你喜欢
          • 2014-08-06
          • 2014-05-25
          • 1970-01-01
          • 2015-05-11
          • 1970-01-01
          • 1970-01-01
          • 2018-03-31
          • 2011-09-14
          • 1970-01-01
          相关资源
          最近更新 更多