我试图解析具有以下格式的名称(使用.Net)
第一最后中间
不过,这里有一个窍门,第一和第二部分是可选的,所以:
如果案文是:
约翰逊
然后,这是假定的姓氏。
如果文本是:玛丽约翰逊,那么这被假定为第一(玛丽)和最后(约翰逊)
如果案文是:
玛丽约翰逊雷安妮
然后假设这是第一(玛丽),最后(约翰逊)和中间(雷安妮)
到目前为止,这就是我所拥有的:
^(?<first>\s*\S+)\s*(?<last>(\S*\s*)*?)(?<middle>\S*\s*)$下面是部分解决方案和名称的链接:
RegexStorm.net
发布于 2016-01-05 18:22:42
^(?:(?<first>\w+)\s+)?(?<last>\w+)\s*(?<middle>.*)发布于 2016-01-05 18:48:38
^((?<first>\w+)\s)?(?<last>\w+)(\s?(?<middle>\w+))*$这将使它们进入您想要的所有捕获组,但是根据人的中间名和需要在代码中加入多少个中间名,中间会有一个或多个捕获(如果没有,则第一个是空的)。
发布于 2016-01-06 16:05:21
原始主义者很抱歉,但为什么不
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]);
}https://stackoverflow.com/questions/34618551
复制相似问题