首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex -用最后一个中间的第一个解析名称

Regex -用最后一个中间的第一个解析名称
EN

Stack Overflow用户
提问于 2016-01-05 18:15:41
回答 3查看 580关注 0票数 1

我试图解析具有以下格式的名称(使用.Net)

第一最后中间

不过,这里有一个窍门,第一和第二部分是可选的,所以:

如果案文是:

约翰逊

然后,这是假定的姓氏。

如果文本是:玛丽约翰逊,那么这被假定为第一(玛丽)和最后(约翰逊)

如果案文是:

玛丽约翰逊雷安妮

然后假设这是第一(玛丽),最后(约翰逊)和中间(雷安妮)

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
^(?<first>\s*\S+)\s*(?<last>(\S*\s*)*?)(?<middle>\S*\s*)$

下面是部分解决方案和名称的链接:

RegexStorm.net

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-05 18:22:42

代码语言:javascript
复制
^(?:(?<first>\w+)\s+)?(?<last>\w+)\s*(?<middle>.*)
票数 0
EN

Stack Overflow用户

发布于 2016-01-05 18:48:38

代码语言:javascript
复制
^((?<first>\w+)\s)?(?<last>\w+)(\s?(?<middle>\w+))*$

这将使它们进入您想要的所有捕获组,但是根据人的中间名和需要在代码中加入多少个中间名,中间会有一个或多个捕获(如果没有,则第一个是空的)。

票数 0
EN

Stack Overflow用户

发布于 2016-01-06 16:05:21

原始主义者很抱歉,但为什么不

代码语言:javascript
复制
        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]);
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34618551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档