2011-12-05 24 views
1

我有這樣的代碼:如何用C#解析代碼。括號中的代碼是標準名稱

(00)1234567891234(10)1234(3100)12315 

代碼括號內是標準的名稱,它們總是相同的。但順序可以不同。 (10)可以是前(00)和代替(3100)可以是(01)

什麼是睫狀數據的最佳解決方案,如:

(00)1234567891234 
(10)1234 
(3100)12315 

,然後,如果我寫

00我會得到1234567891234

10我會得到1234

3100我會得到12315

這樣做的最好方法是什麼?我如何獲得()xx()之間的值?

+2

你有什麼試過?數據在鍵值對之間是否有換行符也不清楚。 – Oded

+0

我嘗試用indexOf這是個壞主意。代碼沒有換行符。 – senzacionale

+2

你看過'String.Split'嗎? – Oded

回答

3

試試這個

const string text = "(00)1234567891234(10)1234(3100)12315"; 

    var result = Regex.Matches(text, @"\((\d+)\)(\d+)").Cast<Match>() 
     .Select(x => new {Value = x.Groups[2].Value, Key = x.Groups[1].Value}) 
     .ToDictionary(y => y.Key, x => x.Value); 

    foreach (var r in result) 
    { 
     Console.WriteLine("Key: {0}, Value: {1}", r.Key, r.Value); 
    } 


    /* OUTPUT 
    * 
    * Key: 00, Value: 1234567891234 
     Key: 10, Value: 1234 
     Key: 3100, Value: 12315 
    */ 

    Console.Read(); 

使用LINQ(這似乎是這裏優選)在一行中你得到一個Dictionary<string, string>與具有兩個屬性KeyValue的對象。

+0

非常好!我喜歡這個方法! –

+0

thx的想法。我認爲正確的代碼是@「\(\ d + \)(\ d +)」 – senzacionale

+0

@Aliostad thx用於更新。 – senzacionale

1

非常簡單的方法:

string input = "(00)1234567891234(10)1234(3100)12315"; 
string[] lines = input.Split(new [] {"("}, StringSplitOptions.RemoveEmptyEntries); 
foreach(string ln in lines) 
{ 
    string key = ln.Substring(0, ln.IndexOf(')')); 
    string value = ln.Substring(ln.IndexOf(')') + 1); 
} 
1

我不會寫代碼,你反而會給你一個提示

(00)1234567891234(10)1234(3100)12315

解析上面的字符串基於()可以使用String.Split方法

這會給你以下的數組

00 
1234567891234 
10 
1234 
3100 
12315 

現在你可以對這樣的價值,並把它們放在一個Dictionary<String, String>