すぐに番号の前にいない特定の単語の後に番号を検索します

トーマス・ウォーカー:

私は、文字列内の郵便番号を検索するためのパターンを使用しようとしています。私はそれが正常に動作させることはできません。

inputLineのサンプルです

What is the weather in 75042?

私はパターンのために使用しようとしていますことはあります

public String getZipcode(String inputLine) {

        Pattern pattern = Pattern.compile(".*weather.*([0-9]+).*");
        Matcher matcher = pattern.matcher(inputLine);

        if (matcher.find()) {

            return matcher.group(1).toString();
        }

        return "Zipcode Not Found.";

    }

私は75002を取得するために探していた場合、私は変更に何が必要なのですか?これは、数に私はひどく混乱しています。2.最後の桁を出力し、私は完全にPatternクラスのJavadocを理解していません。

Wiktor第Stribiżav:

あなたの.*weather.*([0-9]+).*パターンは、第1と行全体つかむ.*と見つけるためにバックトラックをweather、そしてそれを見つけた場合、それ以降の行末までの単語の後の行の部分をつかんで.*最後の桁のみ1桁を見つけるために、再びパターンとバックトラック一桁を満たすので、キャプチャグループ1に格納され[0-9]+たパターン。最後.*だけは最後までラインを消費します。

あなただけ使用して問題を解決すること".*weather.*?([0-9]+).*"(第二作る.*怠け者)、しかし、あなたが使用しているのでMatcher#find()、あなたは単純な正規表現を使用することができます。

Pattern pattern = Pattern.compile("weather\\D*(\\d+)");

そして、試合を取得した後、との値を取得しますmatcher.group(1)

参照してください。 正規表現のデモを

パターンの詳細

  • weather- weather単語
  • \\D* - 数字以外の文字0+
  • (\\d+) - キャプチャグループ1:1桁以上

参照してください。Javaのデモを

String inputLine = "What is the weather in 75042?";
Pattern pattern = Pattern.compile("weather\\D*(\\d+)");
Matcher matcher = pattern.matcher(inputLine);

if (matcher.find()) {
    System.out.println(matcher.group(1)); // => 75042
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=167266&siteId=1