-2

我正在尝试使用正则表达式在表格中查找一些费率,这些正则表达式正在从 HTML 中读取到字符串中。这是一个例子:

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

我正在尝试查找上述字符串中包含的数字。它们不断变化,因此它不能是硬编码的数字搜索。

我试过使用类似的东西:to=EUR'>(...)

但它只返回 0.7,而不是其余的。任何帮助表示赞赏!

编辑:请求了一些代码,所以这里是

      String re2="to=EUR'>(...)";   // Float 1

    Pattern p = Pattern.compile(re2,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher m = p.matcher(webData);

    if (m.find())
    {
        String float1=m.group(1);
        System.out.print("("+float1.toString()+")"+"\n");
    }
4

3 回答 3

4

您可以使用此表达式进行快速而肮脏的搜索:

EUR'>([^<]*)<

但是,这并不理想:使用 HTML 或 XHTML 解析器是更好的解决方案,因为它比任何基于正则表达式的解决方案都更强大和健壮。

于 2012-10-15T00:02:53.910 回答
1

要仅匹配数字,请使用正向环视:

(?<=EUR'>)\\d+(?:\\.\\d*)?(?=<)
(?<=USD'>)\\d+(?:\\.\\d*)?(?=<)
于 2012-10-15T00:14:30.013 回答
1

好的,不是您要求的,但我想指出,当您要查找的字符串的两边都这样固定时,您可以使用 substring() 和 indexOf() 方法,这通常可以更简单地调试:

public class substring_not_regex {

   public static void main(String args[])
   {
      String test= "<td class='rtRates'><a href='/graph/?from=EUR&amp;to=USD'>1.295003</a></td>";     
      String result = getConversion(test,"to=USD'>");
      System.out.println("The result is: " + result);
      test= "<td class='rtRates'><a href='/graph/?from=USD&amp;to=EUR'>0.772199</a></td>";
;     result = getConversion(test,"to=EUR'>");
      System.out.println("The result is: " + result);
   }

   static String getConversion(String tableLine,String toSearchFor)
   {
      String value = "";
      String aref_terminator = "</a>";
      int position = tableLine.indexOf(toSearchFor);
      if ( position == -1 ) return value;
      int start_position = position + toSearchFor.length();
      int end_position = tableLine.indexOf(aref_terminator,start_position);
      if ( end_position == -1 ) return value;
      value = tableLine.substring(start_position,end_position);
      return value;
   }
}

输出:

The result is: 1.295003
The result is: 0.772199
于 2012-10-15T00:19:13.323 回答