0

私はこの正規表現を持っています:

String regexPattern = "[0-9A-Za-z]+(st|nd|rd|th)" + " " + "floor";

私はそれに対してテストしたい:

String lineString = "8th floor, Prince's Building, 12 Chater Road";

私もです:

boolean isMatching = lineString.matches(regexPattern);

false を返します。なんで?

Javaの空白と関係があると思ったので、regexPattern変数の空白を削除して、

regexPattern = "[0-9A-Za-z]+(st|nd|rd|th)floor";

空白のない文字列と一致させました:

String lineString = "8thfloor,Prince'sBuilding,12ChaterRoad"

それでも false を返します。なんで?どんな助けでも大歓迎です。

4

2 に答える 2

3

String.matches()文字列全体がパターンに一致するtrue場合にのみ返します。

.*正規表現の最初と最後に追加してみてください。

例:

String regex = ".*[0-9A-Za-z]+(st|nd|rd|th)" + " " + "floor.*";

ただし、これは最善のアプローチではありません...


より良い代替手段は次のとおりです。

String input = "8th floor, Prince's Building, 12 Chater Road";
String regex = "[0-9A-Za-z]+(st|nd|rd|th)" + " " + "floor";
Pattern p = Pattern.compile(regex);
boolean isMatch = p.matcher(input).find();

フロア番号を抽出する場合は、次のようにします。

String input = "8th floor, Prince's Building, 12 Chater Road";
String regex = "([0-9A-Za-z])+(st|nd|rd|th)" + " " + "floor";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
if (m.find()) {
    String num = m.group(1);
    String suffix = m.group(2);
    System.out.println("Welcome to the " + num + suffix + " floor!");
    // prints 'Welcome to the 8th floor!'
}

Java 正規表現に関する大量の情報については、 Pattern APIを確認してください。

于 2013-08-09T04:46:57.740 に答える
-1

コメントごとに編集されました...

その[0-9A-Za-z]+部分は の最後まで貪欲に一致していthます。

[0-9]代わりに試してください。

于 2013-08-09T04:47:17.637 に答える