簡體   English   中英

正則表達式-解析名字的第一個中間

[英]Regex - Parse name with First Last Middle

我正在嘗試解析(使用.Net )具有以下格式的名稱

倒數第一

這是技巧, FirstMiddle可選的,因此:

如果文本是:

約翰遜

然后假定這是姓氏。

如果文本為:Mary Johnson,則假定為First(Mary)Last(Johnson)

如果文本是:

瑪麗·約翰遜·雷·安妮

然后假定這是First(Mary)Last(Johnson)Middle(Ray Anne)

這是我到目前為止的內容:

^(?<first>\s*\S+)\s*(?<last>(\S*\s*)*?)(?<middle>\S*\s*)$

這是部分解決方案和名稱的鏈接:

RegexStorm.net

^(?:(?<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM