C#拆分名称并关联它所属的全名

时间:2016-08-10 22:27:51

标签: c# split

如果我无法清楚地解释我的问题,我很抱歉。我会尽我所能尽力。

我得到像下面这样的学生名字。它们是逗号分隔的名字,我现在没有任何控制权。我只是从服务电话中得到它们。

studentsfullnames =" FirstName1 LastName1,FirstName2和LastName2,S3的名字和姓氏&#34 ;;

现在我想将学生姓名分成单词,并将每个单词与相应的全名相关联,如下所示

string[] splitNames = studentsfullnames.Split(' ');

我想要下面的关系,以便我将循环每个splitNames,如果我不能在UI上容纳该单词,我将删除整个相应的全名。如果有人能告诉我如何做到这一点,我将不胜感激。同时我试图看看我是否可以使用字典或其他一些对象/集合。我会发布我的发现/更新。

我需要编写代码如下所示

单词FirstName1(属于)FirstName1 LastName1

单词LastName1(属于)FirstName1 LastName1

单词FirstName2(属于)FirstName2和LastName2

单词和(属于)FirstName2和LastName2

单词LastName2(属于)FirstName2和LastName2

单词First(属于)S3的第一个和最后一个名称

单词和(属于)S3的第一个和最后一个名称

单词Last(属于)S3的第一个和最后一个名称

单词名称(属于)S3的第一个和最后一个名称

(属于)S3的第一个和最后一个名字

单词S3(属于)S3的第一个和最后一个名称

2 个答案:

答案 0 :(得分:0)

使用Regex时非常简单:

string names = "John Doe Jane Smith";
var matches = Regex.Matches(names, @"(?<firstName>[a-z]+)\s+(?<lastName>[a-z]+)\,*", RegexOptions.IgnoreCase);
foreach(Match match in matches)
{
    string firstName = match.Result("${firstName}");
    string lastName = match.Result("${lastName}");
}

答案 1 :(得分:0)

我认为这个算法会做你想要的。这是建立一个查找字典,返回包含您正在查找的单词的名称列表。

        var studentsfullnames = "FirstName1 LastName1, FirstName2 and LastName2, First and Last name of S3";

        // split on full name seperated by comma
        var split1 = studentsfullnames.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries);

        // use a dict with a list. so you can key by word but have multiple strings with the same word
        var dict = new Dictionary<string, List<string>>();

        foreach (var name in split1)
        {
            var temp = name.Replace(",", "").Trim();

            // split on spaces to get individual words.
            var split2 = temp.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var word in split2)
            {
                if (dict.ContainsKey(word))
                    dict[word].Add(temp);
                else
                    dict.Add(word, new List<string> { temp });
            }
        }