2013-12-09 38 views
-2

我有含有的String.format(),每行一個產生的數據文件,是這樣的:如何解析一個string.Format輸出?

Class1 [ Property1 = 123, Property2 = 124 ] 
Class2 [ Property4 = 'ABCD', Property5 = 1234, Property6 = 10 ] 
Class1 [ Property1 = 2, Property2 = 3 ] 
Class2 [ Property4 = 'DEFG', Property5 = 2222, Property6 = 19 ] 

等等...

我需要分析他們回到獲得實例的類。

考慮到我有用於生產線等原有的String.format模板,什麼是獲得回原來的值,這樣我可以建立回Class1Class2實例(快速這裏我指的是最快的方法條件開發人員的時間)?

PS:我可以依靠這樣一個事實,即根據模板所有輸入字符串都是「格式良好」的。
PPS:我知道使用JSON會使這個更簡單,但現在我不能。此外,我也知道Irony,但我正在尋找更快的東西(如果可能的話)。

+0

**特定的**問題是...? –

+0

我該怎麼做這樣的解析...... @Adriano:「什麼是獲取原始值的最快方式,以便我可以構建Class1和Class2的實例」 –

+1

Giacomo,我很有諷刺意味。如果你不提供你自己的代碼,問題太廣泛了。我猜一個標記器可以在這裏很好地工作(如果你不需要某些具有「深奧」性能的東西),就可以使用一點反射。 –

回答

1

只要你的字符串不包含特殊字符,這裏是一個開始:

 var str = "Class1 [ Property1 = 123, Property2 = 124 ]"; 
     var m = Regex.Match(str, @"^(?<name>[^ ]+) \[ ((?<prop>[^ ]+) = (?<val>[^ ,]+),?)+\]$"); 
     Console.WriteLine(m.Groups["name"].Value); 
     for (var i = 0; i < m.Groups["prop"].Captures.Count; i++) 
     { 
      Console.WriteLine(m.Groups["prop"].Captures[i].Value); 
      Console.WriteLine(m.Groups["val"].Captures[i].Value); 
     } 

輸出:

Class1 
Property1 
123 
Property2 
124 

如果字符串不包含特殊字符,你可以用更多的去複雜的正則表達式,或者你需要在狀態機中逐個字符地解析你的字符串。第一種情況我無法回答,因爲您沒有提供確切的規則,您的字符串可以或不能包含。第二種情況我無法回答,因爲它太複雜了。

+0

無特殊字符。我想過正則表達式,但我希望string.Format存在反向。 –