1

我敢肯定这并不像我做的那么复杂。我有一个遵循以下模式的字符串:

#,"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 小时以上,试图赶上最后期限,我的大脑被击中了。任何朝着正确方向的帮助或指导将不胜感激。

4

2 回答 2

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;
}
于 2013-10-04T12:44:55.397 回答
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());
于 2013-10-04T13:20:00.420 回答