Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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 span html标记的模式编译器_Java_Html_Jsoup - Fatal编程技术网

Java span html标记的模式编译器

Java span html标记的模式编译器,java,html,jsoup,Java,Html,Jsoup,嗨,我在亚马逊从事云计算项目。我一直在做的一部分代码是从amazon获取用户愿望列表。 由于存在权限限制,我所做的是在给定愿望列表url的情况下提取整个页面源代码。为了提取itemID,我使用了如下模式编译 Pattern p = Pattern.compile("/dp/(\\w+)/"); Matcher matcher = p.matcher(content); 这很简单,现在它正确地列出了该愿望列表中的所有产品及其itemId。 我还需要每个的价

嗨,我在亚马逊从事云计算项目。我一直在做的一部分代码是从amazon获取用户愿望列表。 由于存在权限限制,我所做的是在给定愿望列表url的情况下提取整个页面源代码。为了提取itemID,我使用了如下模式编译

Pattern p = Pattern.compile("/dp/(\\w+)/");
                    Matcher matcher = p.matcher(content);
这很简单,现在它正确地列出了该愿望列表中的所有产品及其itemId。 我还需要每个的价格。根据页面来源,价格是

<span class="a-size-base a-color-price a-text-bold">
                      $7.19
                    </span>

$7.19
我需要为这一个写一个模式,但我完全困惑和卡住了。我不擅长正则表达式。谁能帮忙吗。我在网上看到了href的参考资料,但我认为这对我不起作用


多亏了dkatzel,我找到了这个工具Jsoup。我尝试了在线转换,所以当我执行CSS Query div时,我得到了所需的输出。但是如何在java程序中硬编码呢。我有jsoup罐子

一个简单的表达式不管用吗

\\$\\d+(?:\\.\\d+)
\\$
匹配文本
$

\\d+
匹配数字

(?:\\.\\d+)
匹配可能的小数


我想,整个匹配就是您要寻找的,除非您不需要美元符号,否则您可以使用捕获组并获取第一组(即
\\$(\\d+(?:\\\.\\d+)
)或查找(即
(?)简单的表达式不起作用吗

\\$\\d+(?:\\.\\d+)
\\$
匹配文本
$

\\d+
匹配数字

(?:\\.\\d+)
匹配可能的小数


我想,整个匹配就是您要寻找的,除非您不需要美元符号,否则您可以使用捕获组并获取第一组(即
\\$(\\d+(?:\\\.\\d+)
)或查找(即
(?使用Jsoup的替代答案)

Element e = doc.select("span.a-size-base").first();
在项目中或编译时包含
jsoup-1.x.x.jar
,并添加以下导入

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

使用Jsoup的替代答案

Element e = doc.select("span.a-size-base").first();
在项目中或编译时包含
jsoup-1.x.x.jar
,并添加以下导入

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

我建议你使用一个HTML解析库来为你做这一切。(除非你需要自己解析它来完成学业)我不需要自己解析它。我的主要项目完全不同。那么这些价格出现在什么上下文中?它们总是在那种带有那些类名的span标记中吗?是的。这些是唯一包含价格的标记。我可以附加页面源代码,但它将非常长。我建议您使用HTML解析库为你做这一切。(除非你需要自己解析它来完成学业)我不需要自己解析它。我的主要项目完全不同。那么这些价格出现在什么上下文中?它们总是在带有这些类名的span标记中吗?是的。这些是唯一包含价格的标记。我可以附加页面源代码,但它将非常长。我做了
List price=new ArrayList();Pattern pr=Pattern.compile(“\\$\\d+(?:\\\.\\d+);Matcher priceMatcher=pr.Matcher(content);while(priceMatcher.find()){if(!price.contains(priceMatcher.group(1)))price.add(priceMatcher.group(1));}System.out.println(“在迭代中获取的价格”+计数);for(字符串s:price){System.out.println(s);}
提供IndexOutOfBoundsException(“无组”+组);@sa_nyc使用
.group(0)
,因为它是整个匹配项。如果要匹配整个标记,您可以使用以下选项:
\\s*(\\$\\d+(?:\\.\\d+)\\s*
,然后使用
.group(1)
因为有一个捕获组。通过一个小的修改(即标记中双引号的转义字符)工作得很好。感谢您节省了时间。如果我不想匹配$SYMBOL did,我该怎么办?
List price=new ArrayList();Pattern pr=Pattern.compile(\$\\d+(?:\\\\\.\\d+));Matcher priceMatcher=pr.Matcher(content);while(priceMatcher.find()){if(!price.contains(priceMatcher.group(1)))price.add(priceMatcher.group(1));}System.out.println(“在迭代中获取的价格”+count);for(字符串s:price){System.out.println(s);}
提供IndexOutOfBoundsException(“无组”+组);@sa_nyc使用
.group(0)
,因为它是整个匹配项。如果要匹配整个标记,您可以使用它:
\\s*(\\$\\d+(?:\\.\\d+)\\s*
然后使用
.group(1)
因为有一个捕获组。通过一个小的修改(即标记中双引号的转义字符)工作得很好。感谢您节省时间。如果我不想匹配$symbol,我该怎么办