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

本文关键字:全名 关联 拆分 | 更新日期: 2023-09-27 18:02:03

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

我得到的学生全名如下。它们是逗号分隔的名字,我现在无法控制它们。我刚接到服务电话。

studentsfullnames = "FirstName1 LastName1, FirstName2 and LastName2, S3的姓和名";

现在我要将studentsfullnames拆分为单词,并将每个单词与相应的全名相关联,如下所示

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

我想要像下面这样的关系,这样我就会循环每个splitNames,如果我不能在UI上容纳那个词,我将删除整个对应的全名。如果有人能告诉我怎么做,我将不胜感激。同时,我想看看我是否可以使用字典或其他一些对象/集合。我会把我的发现/更新贴出来。

我需要写代码,将识别如下

单词FirstName1(属于)FirstName1 LastName1

单词LastName1(属于)FirstName1 LastName1

单词FirstName2(属于)FirstName2和LastName2

单词and(属于)FirstName2和LastName2

单词LastName2(属于)FirstName2和LastName2

单词First(属于)S3的名和姓

单词和(属于)S3的姓和名

单词Last (belong to) S3的姓和名

单词名称(属于)S3的姓和名

S3的姓和名

单词S3(属于)S3的姓和名

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

使用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}");
}

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

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