将全名拆分为名字、姓氏和头衔

Split full name into first, last and titles

example of the column

我有一个名为 FULLNAME 的列,其中包含由 space 分隔的 FIRSTNAME 和 SURNAME 的变体,以及由 space 分隔的 TITLE、FIRSTNAME 和 SURNAME。例如,我可以让 JOHN SMITH 或 DR JOHN SMITH。

我在 Visual Studios 中使用 C#。

我按照以下方式遍历每一个:

 foreach (DataRow dr in spreadsheetdata.Tables["EPABase"].Rows)

我的标题数组如下:

            title[0] = "Mr";
            title[1] = "Mrs";
            title[2] = "Miss";
            title[3] = "Ms";
            title[4] = "Dr";
            title[5] = "Rev";
            title[6] = "Hon";
            title[7] = "Mx";
            title[8] = "Other";

我采用哪种方式并不重要,但首先获取 SURNAME 可能更容易,因为它始终是字符串中的最后一组字符,直到第一个 space来自右边的值。如果我将它放入它自己的 SURNAME 字符串中,然后将其从原始的 FULLNAME 字符串中删除,然后我可以使用我的数组查看从左边到第一个 space 的第一组字符是否出现在其中, 如果是,则用作 TITLE 字符串,但如果不是,则使用删除 SURNAME 后的剩余字符串作为 FIRSTNAME 字符串。

关于如何实现第一步,获取 SURNAME,有点卡住了。我试过 LASTINDEXOF,但这是一个整数值,我需要字符串。

如果您确定名字或姓氏中没有 space,您可以尝试这样的操作:

string[] fullNames = { "John Smith", "Dr John Smith" };
        string[] titles = { "Mr", "Mrs", "Dr" };

        foreach (var item in fullNames)
        {
            var details = item.Split(' ');
            if (titles.Contains(details[0]))
            {
                Console.WriteLine($"Title: { details[0]} ");
                Console.WriteLine($"First Name: { details[1]} ");
                Console.WriteLine($"Last Name: { details[2]} ");
            }
            else
            {
                Console.WriteLine($"First Name: { details[0]} ");
                Console.WriteLine($"Last Name: { details[1]} ");
            }
        }

要获取姓氏,您可以执行以下操作:

foreach (DataRow dr in spreadsheetdata.Tables["EPABase"].Rows)
        {
            var value = dr["FULLNAME"].ToString();
            var elementsOfName = value.Split(" ");
            var lastName = elementsOfName[elementsOfName.Length - 1];
            Console.WriteLine(lastName);
        }