Java 从字符串中检索具体数据
我正在尝试从字符串中检索数据产品id,如下所示: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 - Sienkiewicz Henryk" rel="nofollow" data-product-id="prod14290034"> <im
<a href="/w-pustyni-i-w-puszczy-sienkiewicz-henryk,prod14290034,ksiazka-p" class="img seoImage" title="W pustyni i w puszczy - 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 - 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 - 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 - 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
编辑了我的答案,也要注意这个模式