1

我正在执行一项任务,我需要在其中搜索网站并提取转化率。

如果我能够简单地匹配汇率,这将很容易捕获和提取,但我需要能够点击更新按钮并让程序搜索更新的转化率,所以我不能简单地硬编码匹配搜索。

有没有一种方法可以匹配费率之前的文本并捕获匹配之后的所有文本?

如果有更好的方法可以做到这一点,我也愿意接受建议。当我不知道确切的费率是多少时,我只需要帮助来了解如何从网站上获取费率。我只知道费率的格式以及费率在网站内的位置。

这是我到目前为止所拥有的:

String regex = "(?<=EUR'>)\\d+(?:\\.\\d*)?(?=<)";

Pattern pattern = Pattern.compile(regex);
Matcher match = pattern.matcher(?);

while (match.find()) {   
  System.out.println("Found a match: " + match.group(1).toString());  
  System.out.println("Start position: " + match.start(1)); 
  System.out.println("End position: " + match.end(1)); 
} 

我想我了解如何设置模式,但是如果我只知道开头和结尾将是什么而不是结尾,我不确定我应该为匹配字符串添加什么......

我需要抓住的一个例子是下面的行

<td class='rtRates'><a href='/graph/?from=USD&amp;to=EUR'>0.772000</a></td>

我需要抓住这条线的汇率,但它会不断变化

4

3 回答 3

0

我不确定你的问题是什么,因为你的表达符合你的期望(我认为)。在 Regexr 上查看

如果您想在标签之间的部分看起来更灵活,您可以使用这个:

(?<=EUR'>)[^<]*

[^<]一个否定字符类。它将匹配任何字符,但<. 然后,您还可以删除前瞻断言。

在 Regexr 上查看

于 2012-10-15T06:51:42.003 回答
0

不要使用正则表达式来解析 html,否则迅猛龙会来吃掉你。使用诸如jsoup之类的东西并查询带有类的<a>元素的值。<td>rtRates

于 2012-10-15T06:08:29.060 回答
0

你不能只用这个吗?

EUR'>(\d+(?:\.\d+)?)<

该速率在第 1 组中捕获,这很方便,因为您已经在使用group(1)它来提取它。;) 但说真的,您的正则表达式中没有捕获组,因此调用group(1)Matcher 会导致异常。是什么赋予了?

ps 请注意,我将您的更改\d*\d+. 几乎每个试图匹配十进制数字的人都需要小数点后至少一位。如果这里不是这种情况,请继续将其更改回来。

于 2012-10-15T07:45:11.063 回答