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的姓和名
使用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 });
}
}