代码之家  ›  专栏  ›  技术社区  ›  Gideon

regex-查找具有特定类的td,包括嵌套表

  •  0
  • Gideon  · 技术社区  · 15 年前

    我必须解析一段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>
    

    我需要提取每个 td 随班 blabla ,但每个单元格可以有0个或多个嵌套表,其中包含多个嵌套TD。

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

    谢谢

    6 回复  |  直到 15 年前
        1
  •  6
  •   Welbog    15 年前

    不要试图用正则表达式解析HTML。您不能编写与所需内容匹配的表达式,因为HTML不是常规的。

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

    您要查找的xpath表达式是

    //td[@class="someClass"]
    
        2
  •  4
  •   René    15 年前

    如果需要进行扩展HTML解析,我建议使用 Html Agility Pack 而不是正则表达式。HAP从HTML页面构建一个XML文档,这样您就可以使用xpath查找特定的节点。

        3
  •  1
  •   rahul    15 年前

    为什么不使用CSS选择器?

        4
  •  0
  •   Ratnesh Maurya    15 年前

    ([tt][dd]\sclass=\“blabla\”)

        5
  •  0
  •   Xetius    15 年前

    你要找一个类似于 /<td\sclass=\"(.*?)\">/ 但是我不知道如何在.NET中实现这一点。

    但是,由于形成HTML的方式很差,regex不是解析的好候选者。有很多更好的工具可以做到这一点。

    如前所述,使用xpath是使用//td[@class=“someclass”]执行此操作的很好方法。这将为您提供td节点。然后,您可以获取其中的内容并根据需要进行处理。

        6
  •  0
  •   Mike Caron    15 年前

    不能只使用正则表达式,因为它太复杂了。即使使用lookahead匹配,regex也必须动态更改,因为您必须增加 </td> 你要根据多少来寻找 <td> 找到你想要的那个。