【问题标题】:using a regex in jsoup在 jsoup 中使用正则表达式
【发布时间】:2015-01-26 11:30:58
【问题描述】:

我正在jsoup 尝试我的第一个严肃项目,但我陷入了这个问题-

我正在尝试从网站获取邮政编码。有一个邮政编码列表。

这是显示邮政编码的行之一-

<td align="center"><a href="http://www.zipcodestogo.com/Hialeah/FL/33011/">33011</a></td>   

所以我的想法是浏览页面并获取所有包含 1-9 的 6 位数字的字符串。正则表达式是^[0-9]{6,6}$

代码是 -

doc.select("td:matchesOwn(^[0-9]{5,5}$)");

但是什么也没出来。我找不到从该站点获取这些邮政编码的方法.... 有人知道怎么做吗?

这里真正的问题是我如何获得不在任何标签中但只是公开写出的数字(我想有一个术语,但我对 xml 术语不太好)

【问题讨论】:

  • :matchesOwn(regex) - elements whose own text matches the specified regular expression. The text must appear in the found element, not any of its descendants.
  • 不错的报价,真的帮助了我。现在你能帮我找到解决问题的方法吗?
  • OT:之间的值称为元素内容
  • 如果您想获取不在任何标签中的数字,那么您可以将文档作为字符串获取并使用一些正则表达式搜索数字。

标签: java jsoup web-crawler


【解决方案1】:

我用Element#getElementsMatchingOwnText解决了这个问题:

public static void main(String[] args) {
    final String html = "<td align=\"center\"><a href=\"http://www.zipcodestogo.com/Hialeah/FL/33011/\">33011</a></td> ";
    final Elements elements = Jsoup.parse(html).getElementsMatchingOwnText("^[0-9]{5,5}$");

    for (final Element element : elements) {
        System.out.println("element = [" + element + "]");
        System.out.println("zip = [" + element.text() + "]");
    }
}

输出:

element = [<a href="http://www.zipcodestogo.com/Hialeah/FL/33011/">33011</a>]
zip = [33011]

【讨论】:

  • 很好的解决方案!当您发布这个简短而正确的解决方案时,我已经创建了一个非常长的代码,它即将开始工作。谢谢!
猜你喜欢
  • 2017-07-10
  • 1970-01-01
  • 2020-09-14
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
相关资源
最近更新 更多