-2

次のルールに一致する正規表現を推奨できる人はいますか?

  • 大文字またはスペース

一致させたい文字列は次のようになります

LONDON 10 Downing St, London

またはこれ

NEW YORK 2859 Broadway, New York, NY 10025

各行を渡すときに、LONDON と NEW YORK という単語を一致させたいと考えています。

PS私はJavaでこれをやっています

4

3 に答える 3

5
  • 文字列の先頭:^
  • 大文字:\p{Lu}
  • スペース: 
  • 2つを組み合わせる:[\p{Lu} ]
  • 任意の数の前のトークン:*
  • 一致が単語の最後で終了するというアサーション (確実に動作するには Java 7 が必要です):\b

したがって、あなたの正規表現は

^[\p{Lu} ]*\b

Java の文字列エスケープ規則に準拠するために、バックスラッシュを 2 重にすることを忘れないでください。

Java 7 では:

Pattern regex = Pattern.compile("^[\\p{Lu} ]*\\b", Pattern.UNICODE_CHARACTER_CLASS);

Java 6 以下の場合:

Pattern regex = Pattern.compile("^[\\p{Lu} ]*(?<=\p{Lu})");
于 2013-08-04T15:43:28.590 に答える
1

次のパターンを使用できます。

^[A-Z ]+

これは、文字列の先頭から 1 つ以上の大文字のラテン文字またはスペースに一致します。

これを簡単に変更して、末尾のスペースをキャプチャしないようにすることができます。

^[A-Z ]*[A-Z]
于 2013-08-04T15:42:35.430 に答える
-2

これを使って:

^\u+( \u+)*

これは多数の大文字に一致し、オプションで (1 つのスペース、その他の大文字) のグループが続きます。これにより、常にスペースで終わることを回避できます。

于 2013-08-04T15:45:12.500 に答える