0

私はしばらくの間この問題を解決しようとしてきましたが、それでも答えが見つかりませんでした。目的は、HTMLWebページからいくつかのデータを取得することです。インターネット関連の部分はすべてできますが、問題があります。これは私が持っている文字列です:

class = "datastream-graph-value"> 496

問題はこれらの引用符です。そうしないと、私のアプリは重要なデータである「496」を取得できますが、引用符を使用するとデータを取得できません。

そのデータを取得するための良い方法はどれですか?(「>」記号の後に「\ n」があることに注意してください)

仲間ありがとう!

4

1 に答える 1

1

通常、xmlを読み取るための正規表現はお勧めしませんが、XMLパーサーを使用したHTMLは悪夢になる可能性があります。

以下のサンプルで。

<a class="datastream-graph-value" href="http=blah" > 496</a>
<a class="other"> 496</a>

以下の正規表現を使用すると、適切に処理されます。

(class=["][^>"]*["])

その正規表現の使用方法の優れた例を示します。 http://www.vogella.com/articles/JavaRegularExpressions/article.html

コードサンプルの返信が必要な場合は、解決できないものが表示されます。

編集:

退屈だったのでサンプルをまとめてみませんか

package temp;


import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTestPatternMatcher {
  public static final String EXAMPLE_TEST = "<a class=\"datastream-graph-value\" href=\"http=blah\" > 496</a> <a class=\"other\"> 496</a>";

  public static void main(String[] args) {
    Pattern pattern = Pattern.compile("(class=[\"][^>\"]*[\"])");
    // In case you would like to ignore case sensitivity you could use this
    // statement
    // Pattern pattern = Pattern.compile("\\s+", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(EXAMPLE_TEST);
    // Check all occurance
    while (matcher.find()) {
      System.out.print("Start index: " + matcher.start());
      System.out.print(" End index: " + matcher.end() + " ");
      String match = matcher.group();
      match = match.replace("class=", "");
      System.out.println(match);
    }
    // Now create a new pattern and matcher to replace whitespace with tabs
    Pattern replace = Pattern.compile("\\s+");
    Matcher matcher2 = replace.matcher(EXAMPLE_TEST);
    System.out.println(matcher2.replaceAll("\t"));
  }
} 
于 2012-12-09T14:36:49.340 に答える