【问题标题】:C#: extract last name, first name and middle name from stringC#:从字符串中提取姓氏、名字和中间名
【发布时间】:2015-08-29 17:33:36
【问题描述】:

我有一个包含很多人名的文本文件:

  • 阿贝琳德,小埃利索。 DELA PEÑA
  • 德拉克鲁兹,弗朗西亚德拉罗萨
  • 德耶稣,阿尔玛西诺巴
  • 史密斯,约翰·保罗·西诺巴
  • 阿博尔多,艾玛·德拉托雷
  • ABORDO,杰温·德洛斯·雷耶斯
  • ABAO,贾恩德洛斯雷耶斯

DELOS REYES、DE LA TORRE 和 DELA PEÑA 是中间名。

如果姓氏和名字中间名仅包含单个值,我可以毫无问题地使用split() 放入数组。当第二部分是多个名字或有多个姓氏或有后缀时,我遇到了困难。我怎样才能得到这些名字?

【问题讨论】:

  • 请添加一些您对预期结果有疑问的示例数据;)。
  • 我不认为你会解决它,如果你的文件中的数据没有被格式化成你可以识别中间名开始和结束的方式,那就很难分辨了。
  • 西班牙名字通常不包含中间名
  • 这些是菲律宾人的名字。
  • (作为人类)使用哪些确切规则来找出名字的结尾和中间名的开头?清楚明确地说明它们,然后我们可以帮助您将它们翻译成代码。

标签: c# regex


【解决方案1】:

假设你用逗号','分割来得到姓和名,用空格分割第二部分。保留第一部分作为名字,其余部分作为中间名。

【讨论】:

  • 是的,这是我目前的做法,但如果这个人有两个名字,比如 John Paul,第二个名字会附加到 middlename,这是错误的。另外,如果有 Sr. 或 Jr. 之类的后缀
  • 您应该在记录数据时尝试遵循固定模式。这样会更容易。
  • 那些文本文件是非我开发的系统生成的。所以我无权重做导出数据的格式。
【解决方案2】:
var nameArr = name.Split(' ');
if (nameArr.length > 3)
{
    var fName = nameArr [0];
    var lname = nameArr[nameArr.length-1];

    string middlename;
    for (int i = 1; i < nameArr.length - 1; i++)
    {
        middlename += nameArr[i];
        //probably a more elegant way of joining the names
    }
}

应该可以吗?

【讨论】:

  • 如果此人有一个姓氏、一个姓氏和一个或多个中间名,这将正常工作。请参阅上面的示例列表。 (如果碰巧这个人有多个名字,比如 John Paul,Paul 将被包括在 minddelname 中。
  • 我明白了。那么是的,如果不能先格式化数据,这是不可能的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多