-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

OK、あなたが求めていたものではありませんが、探している文字列の両側がそのように固定されている場合、デバッグが簡単になることが多い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 に答える