【问题标题】:Regular expression to find a value in a webpage在网页中查找值的正则表达式
【发布时间】:2011-01-24 11:46:45
【问题描述】:

我需要找到一个正则表达式,它可以从 html 文档的表格单元格中提取一个值。

此表格单元格的示例内容是“结果:40 分钟”。

我需要一个正则表达式来匹配实际数字 (40)。

这是在java中,在此先感谢。

【问题讨论】:

  • 这信息太少,无法构建任何类型的匹配规则。在大多数情况下,最好使用 DOM 解析器而不是正则表达式。
  • 我要刮这个页面metazone.co.uk/tubemap/…

标签: java html regex


【解决方案1】:

我之前尝试过使用正则表达式来做到这一点,但这是一个痛苦的洞。

使用 XPath 表达式之类的东西要容易得多,您可以通过它在 DOM 层次结构中的位置来指定位置。 Apache 库可以做到这一点(特别是 Xalan),可以在这里找到:http://xml.apache.org/xalan-j/

您可以使用 Firefox 插件 XPath Checker 来帮助您解决这个问题。

顺便说一下,如果您正在寻找其他工具/信息,您所说的领域称为“网络抓取”。

【讨论】:

    【解决方案2】:

    你想使用 DOM/XPATH,但如果你真的需要正则表达式来处理简单的情况,试试

    /\<\s*td[^\>]*\>\s*result: (\d+) mins\s*\<\/td\>/i
    

    同样,可能适用于大多数 HTML,但正则表达式不适用于所有 HTML。

    【讨论】:

      【解决方案3】:

      如果不是一次性的情况,请使用 XPath 检索某个 HTML 元素的内容(“结果:40 分钟”),然后使用简单的正则表达式来获取您需要的内容:"result: (\d+) mins"(以适应 OverClocked写)。如果 HTML(很可能)不正确,您可以使用 JTidy 之类的内容进行清理。

      在最简单的情况下,您只需在完整页面中查找表达式:".*result: (\d+) mins.*"

      顺便说一句,您指向的网页不包含任何类型的“结果”:如果您输入“路线”,您应该可以这样:

      String pageContent = ...
      Pattern p = java.util.regex.Pattern.compile("Route: ((\\d*) hour )*(\\d*) mins");
      Matcher m = p.matcher(pageContent);
      m.find();
      System.out.println(m.group{1});
      System.out.println(m.group{2});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多