1

だから、私はJavaでメソッド「matches()」を使用して作業してきました..のように:

Str1 = 'Jane';
Str1.matches("[A-Z][a-zA-Z]*");

文字列が大文字で始まり、その後に任意の数の大文字/小文字が続くかどうかを調べます。未知の量の単語を一致させようとしている場合を除いて、すべての構成を理解できるようです。たとえば、文字列が文字とスペースだけで構成されていることを確認したい場合、各単語は大文字で始まります。できると思っていた

Str2 = 'Jane Marie Doe';
Str2.matches("[A-Z][a-zA-Z\\s]*");

大文字の後に任意の数のスペース、大文字、および小文字が続く場合と同様ですが、すべてのスペースの後に大文字が続く必要があるという規則は強制されません。トークン化する必要がありますか (それが正しい単語かどうかはわかりません)、スペースを区切り文字として使用して文字列を分割し、各単語を評価する必要がありますか? または、これを ([AZ][a-zA-Z]\\s)* のような種類のマッチメソッドに入力する方法はありますか?ここで、アスタリスクは括弧内のエントリ全体の任意の数を意味しますか? これを入力しているときは、最後の単語の後にスペースがないため、概念的にも機能しないと考えています。おそらく ([AZ][a-zA-Z]\\s?)* が機能するでしょうか? しかし、そうではありません。なるものはありますか?

これに対処する他の質問がいくつかあることがわかりましたが、決定的な有効な答えを見つけることができなかったようです.

4

4 に答える 4

7

これを試して:

([A-Z][a-zA-Z]*\s*)+

1 つの大文字の後に任意の数の他の文字が続き、その後に任意の数のスペースが続き、任意の回数繰り返されます。

状況によっては、ハイフンなどの法的な句読点を追加することもできます。

したがって、次のようなものです:

([A-Z][a-zA-Z\-\']*\s*)*
于 2012-11-27T21:52:20.020 に答える
1

これはうまくいくはずです:

"([A-Z][a-zA-Z]*\\s*)*"

単語間の複数のスペースの一致を許可するように変更\\s?しました。\\s*

于 2012-11-27T21:51:13.813 に答える
1

次の正規表現を試してください。

"[A-Z][a-zA-Z]*(\\s+[A-Z][a-zA-Z]*)*$"
于 2012-11-27T21:51:33.353 に答える