これを試して: -
"([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)"
説明 : -
( // Capture group 1
[ // Character class
a-zA-Z // alphabets
. // a Dot
' // A quote
- // A hyphen (Should be at the end, in the middle it means a range
]+ // Character class close. One or more repetition
) // Group 1 closes
あなたの例で与えられているように、あなたの姓または名の間にスペースもあるようです。正しいか確認してください。
two capture groups
上記の正規表現があります。両方のグループがキャプチャfirstname
し、lastname
。両方を印刷できます。
いくつかの文字列で実行されるサンプル:-
String str1 = "Ab.CD, Ab.CD";
String str2 = "F'b-CFgD., F'b-CFgD.";
String str3 = "F'b-CF gD, F'b-CF gD";
System.out.println(str1.matches("([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)")); // true
System.out.println(str2.matches("([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)")); // true
System.out.println(str3.matches("([a-zA-Z.'-]+),[ ]*([a-zA-Z.'-]+)")); //false
ご覧のとおり、3番目の文字列の間にスペースがあるため、最後の1つはfalseを出力します。スペースも一致させたい場合は、それをキャラクタークラスに追加します。
それを確認しfirstname
、lastname
文字だけで始めるには、次のように正規表現を変更できます。-
"([a-zA-Z][a-zA-Z.'-]+),[ ]*([a-zA-Z][a-zA-Z.'-]+)"
[a-zA-Z]
最初の文字が指定されたアルファベット範囲からのものであることを確認するために、両方のパターンの先頭に追加されました。