尝试这个: -
"([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
如您所见,最后一个打印错误,因为您的第三个字符串之间有一个空格。如果您还想匹配空格,请将其添加到您的角色类中。
为了确保仅以字母开头firstname
,lastname
您可以像这样修改您的正则表达式:-
"([a-zA-Z][a-zA-Z.'-]+),[ ]*([a-zA-Z][a-zA-Z.'-]+)"
在两个模式的开头添加[a-zA-Z]
,以确保第一个字符来自给定的字母范围。