我正在尝试从字符串中检索数据产品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"> <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,但不输出任何值。为什么?
答案 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 - 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 - 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");
}