2016-08-10 27 views
0

如果我無法清楚地解釋我的問題,我很抱歉。我會盡我所能。C#拆分名稱和聯繫人所屬的全名

我得到像下面這樣的學生全名。他們是逗號分隔的名字,我現在不能控制。我只是讓他們從服務電話。

studentsfullnames =「FirstName1 LastName1,FirstName2和LastName2,S3的名和姓」;

現在我想studentsfullnames分成詞和每個詞與此對應的全名像下面

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

我要像下面的關係聯繫起來,讓我每次循環splitNames,如果我不能容納這個詞UI,我會刪除整個相應的全名。如果有人能告訴我如何做到這一點,我將不勝感激。同時我正在嘗試查看是否可以使用字典或其他對象/集合。我會發布我的發現/更新。

我需要編寫代碼,用於將標識相似的下面

字FIRSTNAME1(屬於)FIRSTNAME1 LastName1

字LastName1(屬於)FIRSTNAME1 LastName1

字FIRSTNAME2(屬於)FIRSTNAME2和LastName2

字和(屬於)FIRSTNAME2和LastName2

字LastName2(屬於)FIRSTNAME2和LastName2

字優先(屬於)第一和S3

的字和姓氏(屬於)第一和S3

的的姓字最後(屬於)第一和S3

字名的姓(屬於)第一和S3

的字(屬於)第一和S3

的姓氏的姓210

字S3(屬於)第一和S3

+0

so'and'與'FF的第一和最後一個名字以及'FirstName2和LastName2'關聯嗎? – konkked

+0

@ konkked ..對不起沒有給你.. – Ziggler

+0

你有' - >'從'和'繪製到'FirstName2和LastName2'和'FFirst和S3的名字,所以想知道這是否意味着單詞'和'與這兩個語句有關係,或者如果它意味着別的什麼 – konkked

回答

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}"); 
} 
+0

@ returnsvoid ...請參閱我的問題..我無法獲取任何xml標籤..我只是用逗號分隔簡單的字符串... – Ziggler

+0

那些不是XML標籤,它們是正則表達式匹配組。在解散它之前請嘗試運行我的代碼 - 它確實有效。 – returnsvoid

+0

我運行了你的代碼。我在firstName中獲得John,在lastName中獲得第一個在foreach循環中循環的Doe。到目前爲止好。你將如何知道約翰是約翰·多伊的一部分。 – Ziggler

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