試試這個: -
"([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]
在這兩個模式的開始,以確保第一字符來自給定的字母範圍。
你的解釋對於這些例子是不完整的。看起來你可以在名稱中包含空格(來自示例),並且逗號後跟空格似乎是名稱的分隔符,但它沒有正式指定。好,完整的規範是正確地解決問題的關鍵...... – PhiLho