从String检索具体数据

时间:2019-07-14 20:25:07

标签: java regex string

我正在尝试从字符串中检索数据产品ID,如下所示:

<a href="/w-pustyni-i-w-puszczy-sienkiewicz-henryk,prod14290034,ksiazka-p" class="img seoImage" title="W pustyni i w puszczy &nbsp;-&nbsp;Sienkiewicz Henryk" rel="nofollow" data-product-id="prod14290034"> <img class="lazy" src="/b/mp/img/svg/no_picture.svg" lazy-img="https://ecsmedia.pl/c/w-pustyni-i-w-puszczy-p-iext43240721.jpg" alt=""> </a>

输出应为

prod14290034

我试图使用正则表达式来实现这一目标,但是我是新手。

正则表达式对它有好处吗?如果是这样,该怎么做?

/编辑 根据艾玛的评论。

我做了这样的事情:

String z  = element.toString();
        Pattern pattern = Pattern.compile("data-product-id=\"\\s*([^\\s\"]*?)\\s*\"");
        Matcher matcher = pattern.matcher(z);
        System.out.println(matcher.find());
        if (matcher.find()) {
            System.out.println(matcher.group());
        }

它返回true,但不输出任何值。为什么?

2 个答案:

答案 0 :(得分:0)

您可以将jsoup用于Java-它是用于解析HTML页面的库。还有许多其他库可用于不同的语言,beautifulSoup用于python。

编辑:这是jsoup的代码段,您可以选择带有标签的任何元素,然后使用attr方法获取所需的属性。

Document doc = Jsoup.parse(
    "<a href=\"/w-pustyni-i-w-puszczy-sienkiewicz-henryk,prod14290034,ksiazka-p\" " +
        "class=\"img seoImage\" " +
        "title=\"W pustyni i w puszczy &nbsp;-&nbsp;Sienkiewicz Henryk\" " +
        "rel=\"nofollow\" " +
        "data-product-id=\"prod14290034\"> " +
        "<img class=\"lazy\" src=\"/b/mp/img/svg/no_picture.svg\" lazy-img=\"https://ecsmedia.pl/c/w-pustyni-i-w-puszczy-p-iext43240721.jpg\" alt=\"\"> </a>\n"
);

String dataProductId = doc.select("a").first().attr("data-product-id");

答案 1 :(得分:0)

您可能会使用一些HTML / XHTML / XML库,该库可以将字符串数据转换为文档或至少转换为Element,然后您可以轻松地从那里获取属性值。但是,如果您想使用正则表达式,则可以尝试以下代码段

  @Test
  public void productId() {
    String src =
        "<a href=\"/w-pustyni-i-w-puszczy-sienkiewicz-henryk,prod14290034,ksiazka-p\" class=\"img seoImage\" title=\"W pustyni i w puszczy &nbsp;-&nbsp;Sienkiewicz Henryk\" rel=\"nofollow\" data-product-id=\"prod14290034\"> <img class=\"lazy\" src=\"/b/mp/img/svg/no_picture.svg\" lazy-img=\"https://ecsmedia.pl/c/w-pustyni-i-w-puszczy-p-iext43240721.jpg\" alt=\"\"> </a>";
    final Pattern pattern = Pattern.compile("(data-product-id=)\"(p[a-zA-Z]+[0-9]+)\"");
    final Matcher matcher = pattern.matcher(src);
    String prodId = null;
    if (matcher.find()) {
      System.out.println(matcher.groupCount());
      prodId = matcher.group(2);
    }
    System.out.println(prodId);
    Assert.assertNotNull(prodId);
    Assert.assertEquals(prodId, "prod14290034");
  }