トーマス・ウォーカー:
私は、文字列内の郵便番号を検索するためのパターンを使用しようとしています。私はそれが正常に動作させることはできません。
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
}