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



列的示例

我有一个名为 FULLNAME 的列,它由用空格分隔的 FIRSTNAME 和 SURNAME 的变体以及用空格分隔的 TITLE、FIRSTNAME 和 SURNAME 组成。例如,我可以有约翰·史密斯或约翰·史密斯博士。

我在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 可能更容易,因为它始终是字符串中的最后一组字符,直到右侧的第一个空格值。如果我把它放到它自己的 SURNAME 字符串中,然后将其从原始的 FULLNAME 字符串中删除,然后我可以使用我的数组查看从左到第一个空格的第一组字符是否出现在其中,如果是这样,则用作 TITLE 字符串,但如果没有,则在删除 SURNAME 后使用剩余的字符串作为 FIRSTNAME 字符串。

只是有点卡在如何实现第一步,把姓氏弄出来。我已经尝试过 LASTINDEXOF,但这是一个整数值,我需要字符串。

如果您确定"名字"或"姓氏"中没有空格,请尝试如下操作:

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);
        }

最新更新