2017-09-21 17 views
-2

C#_Howフォーマット番号の文字列どのようにSUMMARYフォーマット番号の文字列に

Car : 2+9+7+2 
Bike : 4+6 
Ship : 3+8 

マイコード:

これは私の出した文字列である

Car2Bike4Ship3Bike6Car9Ship8Car7Car2 

: 文字列の入力を

String source = “Car2Bike4Ship3Bike6Car9Ship8Car7Car2”; 
     var result = Regex 
.Matches(source, @"(?<name>[A-z_[ạảàáãăắẳằặẵâấẩầậẫóỏòọõôốổồộỗơớởờợỡéèẻẹẽêếềểệễúùủụũưứừửựữíìỉịĩýỳỷỵỹđ_ẠẢÀÁÃĂẮẲẰẶẴÂẤẨẦẬẪÓỎÒỌÕÔỐỔỒỘỖƠỚỞỜỢỠÉÈẺẸẼÊẾỀỂỆỄÚÙỦỤŨƯỨỪỬỰỮÍÌỈỊĨÝỲỶỴỸĐ_a-z]+)(?<size>([0-9]+\.[0-9])|([0-9]+))") 
.OfType<Match>() 
.Select(match => new 
{ 
    name = match.Groups["name"].Value, 
    size = double.Parse(match.Groups["size"].Value), 
}) 

.GroupBy(value => value.name) 
.Select(chunk => String.Format("{0}: {1}", 
    chunk.Key, String.Join(" + ", chunk.Select(item => item.size)))); 
     String report = String.Join(Environment.NewLine, result); 
       report = report.Replace(": 0", ":"); 
       report = report.Replace(": +", ":"); 
       txbkqvl.Text = Convert.ToString(report); 

ここでは、SUMARYを先行させ、特別な項目「CAR」を処理したいと考えています。次のようになります。

11 Car : 
2 Unit(s) 2 
1 Unit(s) 9 
1 Unit(s) 7 
10 Bike : 4+6 
11 Ship : 3+8 

私のコードはトレンドになっています。 ありがとうございました!合計の追加

+2

文字を照合するには、C#正規表現で '\ p {L}'を使用します。綴りの範囲は必要ありません。 –

+0

ありがとうございます。私の言語にはUnicode文字が含まれています。これはまさに私の場合と同じです。 :D –

答えて

1

は、特別な治療...そして正直に、一般的に全体のことについては

.Select(chunk => String.Format("{0} {1}: {2}", 
    chunk.Sum(item => item.size), chunk.Key, String.Join(" + ", chunk.Select(item => item.size)))); 

のようなものは非常に簡単である必要があり、私は読みやすいステップにコードを壊すことをお勧めそこから作業しています。あなたの「グル・コード」の種類は非常にコンパクトですが、理解して変更するのは難しいです。

最初にデータを解析して単純なオブジェクトにしてから、それらのオブジェクトを処理します。 1つの巨大なLINQチェーンですべてを行うことは、必ずしもベストプラクティスではありません。