只需添加一些括號
^(([a-z]+\s)([a-z](\.?))\s){0,1}([a-z'-]+)$
你的比賽將是在第1組現在
string resultString = null;
try {
resultString = Regex.Match(subjectString, @"^(([a-z]+\s)([a-z](\.?))\s){0,1}([a-z'-]+)$", RegexOptions.IgnoreCase).Groups[1].Value;
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}
而且,我做出了正則表達式不區分大小寫,這樣就可以把它縮短了(沒有A-ZA -Z但AZ)
更新1
個的號碼組不爲的情況下工作良好,沒有初始所以我寫的正則表達式從扔在一邊
^(\w+\s(\w\.\s)?)(\w+)$
\ w表示任何字人格和這也許是你所需要的(你可以取代它AZ如果工作得更好)
更新2
有在C#中一個不錯的功能,你可以命名你捕獲
^(?<First>\w+\s(?:\w\.\s)?)(?<Last>\w+)$
現在,你可以通過名字而不是數指基(認爲這是一個有點更具可讀性)
var subjectString = "James T. Kirk";
Regex regexObj = new Regex(@"^(?<First>\w+\s(?:\w\.\s)?)(?<Last>\w+)$", RegexOptions.IgnoreCase);
var groups = regexObj.Match(subjectString).Groups;
var firstName = groups["First"].Value;
var lastName = groups["Last"].Value;
@ChrisH更新我的回答 – buckley