次のルールに一致する正規表現を推奨できる人はいますか?
- 大文字またはスペース
一致させたい文字列は次のようになります
LONDON 10 Downing St, London
またはこれ
NEW YORK 2859 Broadway, New York, NY 10025
各行を渡すときに、LONDON と NEW YORK という単語を一致させたいと考えています。
PS私はJavaでこれをやっています
^
\p{Lu}
[\p{Lu} ]
*
\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})");
次のパターンを使用できます。
^[A-Z ]+
これは、文字列の先頭から 1 つ以上の大文字のラテン文字またはスペースに一致します。
これを簡単に変更して、末尾のスペースをキャプチャしないようにすることができます。
^[A-Z ]*[A-Z]
これを使って:
^\u+( \u+)*
これは多数の大文字に一致し、オプションで (1 つのスペース、その他の大文字) のグループが続きます。これにより、常にスペースで終わることを回避できます。