2013-10-04 43 views
1

我相信这不像我做的那么复杂。 我有遵循下面的模式的字符串:使用C解析Fedex事务回复字符串的最佳方法#

#,"value"#,"next value"#,"next value" . . . 

我需要为了在我的应用程序使用的数据分析出数/值对。

这里是一个返回的样品:

0,"120"1,""10,"298630427"29,"577015971830"30,"SG MSNA "33,"A1"34,"4625"35,"239"36,"2105"37,"2759"60,"15"112,"0" 

为了使问题复杂化的字符串可以包含换行符(\ r \ n或\ r \ n)中。 我可以通过简单地用几个string.replace调用去除换行符来处理这个问题。

我最终想将数据解析为键/值对。我似乎无法将自己的思想放在正确的道路上。

我很抱歉,如果这是微不足道的,但我已经拉了18个小时以上两个月,试图满足截止日期和我的大脑被枪杀。任何协助或正确的方向指导将不胜感激。现在

回答

1
var numVal=Regex.Matches(input,@"\"([^\"]+)\"(\d+)") 
       .Cast<Match>() 
       .Select(x=>new 
       { 
        num=x.Groups[2].Value, 
        value=x.Groups[1].Value 
       }); 

你可以如果你直接去键值对迭代numVal

foreach(var nv in numVal) 
{ 
    nv.num; 
    nv.value; 
} 
+0

@Aniruth - 这工作就像我需要。我拥有大部分的内容,但无法将我的头包裹在正则表达式中。 – Dreampoet

1

,你也许可以使用LINQ,使您的生活更轻松。您必须了解并处理与键/值格式不匹配的情况。但是,您可能可以使用类似的东西来实现它。

var string_delimiter = new [] { ',' }; 
var kvp_delimiter = new[] { "\"" }; 

var dictionary = string_value.Split(string_delimiter) 
       .Select(kvp_string => kvp_string.Split(kvp_delimiter, StringSplitOptions.RemoveEmptyEntries)) 
       .ToDictionary(kvp_vals => kvp_vals.First(), kvp_vals => kvp_vals.Last()); 
相关问题