2016-10-13 27 views
-4

文字列分割に関する記事はたくさんありますが、私の問題に対処するための何かを見つけることができません。 文字列を配列に分割する必要がありますが、文字列には区切り文字がいくつかのフィールド(通常区切り文字が入っている値)にあります。c#いくつかの区切り文字と区切り文字を含む分割文字列

ジョン:

文字列のようになります "2016年10月15日": "午前15時20分14秒":私が実行した場合、 "マネージャー"

string[] items = line.Split(':'); 

文字列は6つの項目に分割されますが、実際は4になります。

Split関数ca nこれを扱う?

EDIT: 6つの項目は次のとおりです。

John 
2016/10/15 
"15 
20 
14" 
"Manager" 

私は1つのアイテムであることを時間(午前15時20分14秒)を期待しています。

+1

分割したときの結果はどうなりますか? 6項目は何ですか? – PrestonM

+0

@PrestonM「余分な」アイテムは「:」で分割された時間要素(分、秒)であると思います。 –

+0

あなたの基準に基づいて、6つの項目に分割する必要があります: " – Jivan

答えて

2

IMHO 2つの状態のパーサが必要です:引用符と外部引用符

セパレータ(:)と引用符(")、および引用符のエスケープ方法についても設定できるFast CSV Readerのようなライブラリがあります。

2

最初の要素は引用符で囲まれていないので、きれいに分割するにはレンチが実際にスローされます。サードパーティのライブラリを使用したくない場合は、あなたのケースでどのタイプの入力文字列が有効かわからないので、最初の要素がコロンだけの場合はどうなるでしょうか?これで

public void GetElements() 
    { 
     var delimiter = ":"; 
     var myStr = "John:\"2016/10/15\":\"15:20:14\":\"Manager\""; 

     //Split on quotes and remove elements from the array that are the delimter 
     var elementArray = myStr.Split(new [] { '"'}, StringSplitOptions.RemoveEmptyEntries); 
     elementArray = elementArray.Where(x => x != delimiter).ToArray(); 

     //Scrub the first element to remove the delimiter 
     var firstElement = elementArray.ElementAt(0); 
     elementArray[0] = firstElement.Remove(firstElement.Length - 1); 

     foreach(var element in elementArray) Console.WriteLine(element); 

     Console.ReadKey(); 
    } 

仮定は以下のとおりです。

  1. 常に現在の区切りスタイルをたどる文字列に
  2. 任意の追加要素をラップ解除される文字列の最初の「要素」などJohn:"2016/10/15":"15:20:14":"Manager":"My new string"
  3. 空の要素を保持する必要はありません
関連する問題