Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串中检索具体数据_Java_Regex_String - Fatal编程技术网

Java 从字符串中检索具体数据

Java 从字符串中检索具体数据,java,regex,string,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"> <im

我正在尝试从字符串中检索数据产品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>
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());
        }
我试图用正则表达式来实现这一点,但我对正则表达式还不太熟悉

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

/编辑 根据艾玛的评论

我做过这样的东西:

<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>
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,但不打印任何值。为什么?

您可以使用Java—它是一个用于解析HTML页面的库。对于不同的语言,比如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");
Document doc=Jsoup.parse(
“\n”
);
字符串dataProductId=doc.select(“a”).first().attr(“数据产品id”);

您可以使用一些HTML/XHTML/XML库,它可以将字符串数据转换为文档或至少是元素,然后您就可以轻松地从中获取属性值。但是如果你想使用正则表达式,你可以试试这个代码片段

  @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");
  }
@测试
public void productId(){
字符串src=
"";
final Pattern=Pattern.compile(“(数据产品id=)\”(p[a-zA-Z]+[0-9]+)\”;
最终匹配器匹配器=pattern.Matcher(src);
字符串prodId=null;
if(matcher.find()){
System.out.println(matcher.groupCount());
prodId=matcher.group(2);
}
系统输出打印项次(prodId);
Assert.assertNotNull(prodId);
Assert.assertEquals(prodId,“prod14290034”);
}

你应该展示你所做的尝试。我正在使用jsoup。我需要我贴出来的身份证。这个网站看起来是这样的:pustyni i w puszczy&qtype=basicForm&sort=priceAsc,你看不到确切的ID。它不起作用,因为ID看起来也是这样:
p1923133
编辑了我的答案,也要注意这个模式