2016-08-10 17 views
0

私の質問をはっきりと説明できない場合は申し訳ありません。私はできる限り最善を尽くします。C#名前を分割して、それが属する完全な名前に関連付けます

私は以下のようなstudentsfullnamesを取得します。それらはカンマ区切りの名前で、私は今のところコントロールできません。私はちょうどサービスコールからそれらを得る。

studentsfullnames = "FirstName1 LastName1、FirstName2 and LastName2、S3の名と姓";

今、私は以下のような関係をしたい単語にstudentsfullnamesを分割し、

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

以下のように、この対応する完全な名前で各単語を関連付ける各splitNamesがループ私がするように、と私はその言葉を収容することができない場合UI、対応するフルネーム全体を削除します。どのように私がこれを行うことができるか誰にでも教えていただければ幸いです。一方、辞書や他のオブジェクト/コレクションを使用できるかどうかを確認しようとしています。私は私の発見/更新を掲載します。

Iのような

の下ワードFIRSTNAME1さん(属する)を特定するコードを記述する必要が

FIRSTNAME1さんLastName1

ワードLastName1(属する)FIRSTNAME1さんLastName1

ワードFIRSTNAME1さんは(属し)FIRSTNAME1さんとLastName2

ワード及び(属する)FIRSTNAME1さんとLastName2

単語LastName2(所属)FIRSTNAME1さんとLastName2

語ファースト(所属)最初とS3

の姓単語とS3

の(所属)姓と名単語S3

の最終(所属)、姓と名の単語名(所属)S3

の姓名S3

の(所属)、姓と名の単語210

単語S3

+0

したがって、 'and'は、' FFirstとS3の名字と 'FirstName2とLastName2'に関連付けられていますか? – konkked

+0

@konkked ..申し訳ありませんでした.. – Ziggler

+0

'and'から 'FirstName2 and LastName2'と' FFirstとS3'の名字に描画されています。それらの2つのステートメントとの関係を持っているか、それが何か他のものを意味する場合 – konkked

答えて

0

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

@ returnsvoid ...私の質問を参照してください..私はdonot任意のXMLタグを取得..私はちょうどカンマ区切りの単純な文字列を取得します... – Ziggler

+0

これらはXMLタグではなく、Regexのマッチンググループです。私のコードを却下する前にそれを実行してみてください。実際には動作します。 – returnsvoid

+0

あなたのコードを実行しました。 foreachループで最初にループするために、私はfirstNameにJohnを、lastNameにDoeを取得しています。これまでのところ良い。 JohnがJohn 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 }); 
      } 
     } 
関連する問題