[英]Regex - Parse name with First Last Middle
我正在嘗試解析(使用.Net )具有以下格式的名稱
倒數第一
這是技巧, First和Middle是可選的,因此:
如果文本是:
約翰遜
然后假定這是姓氏。
如果文本為:Mary Johnson,則假定為First(Mary)和Last(Johnson)
如果文本是:
瑪麗·約翰遜·雷·安妮
然后假定這是First(Mary)和Last(Johnson)和Middle(Ray Anne)
這是我到目前為止的內容:
^(?<first>\s*\S+)\s*(?<last>(\S*\s*)*?)(?<middle>\S*\s*)$
這是部分解決方案和名稱的鏈接:
^(?:(?<first>\w+)\s+)?(?<last>\w+)\s*(?<middle>.*)
^((?<first>\w+)\s)?(?<last>\w+)(\s?(?<middle>\w+))*$
這會將它們帶入所需的所有捕獲組中,但是中層將具有一個或多個捕獲(如果沒有中間捕獲,則第一個為空),這取決於此人擁有多少中間名,並且需要將其加入代碼中。
很抱歉原始,但是為什么不這樣做
private Tuple<string, string, string> Parse(string input)
{
if (string.IsNullOrEmpty(input))
return null;
var arr = input.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (arr.Length == 1)
{
return new Tuple<string, string, string>(null, null, arr[0]);
}
if (arr.Length == 2)
{
return new Tuple<string, string, string>(arr[0], null, arr[1]);
}
return new Tuple<string, string, string>(arr[0], String.Join(" ", arr.Skip(1).Take(arr.Length - 2)), arr[arr.Length - 1]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.