如果我无法清楚地解释我的问题,我很抱歉。我会尽我所能尽力。
我得到像下面这样的学生名字。它们是逗号分隔的名字,我现在没有任何控制权。我只是从服务电话中得到它们。
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的第一个和最后一个名称
答案 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 });
}
}