C#解析文本块

时间:2011-01-17 11:22:57

标签: c# .net string parsing text

我正在使用的API中的一个函数基本上只返回一大块文本,用分号分隔每个键/值。我如何在C#中解析这样的文本?

  

结果=成功; income_today =; income_thismonth =; income_thisyear =; orders_pending = 19; orders_today_cancelled = 0; orders_today_pending = 0; orders_today_fraud = 0; orders_today_active = 0; orders_today_total = 0; orders_yesterday_cancelled = 0; orders_yesterday_pending = 3; orders_yesterday_fraud = 2; orders_yesterday_active = 0;

4 个答案:

答案 0 :(得分:13)

嗯,这看起来像是:

  • 调用text.Split(';')将块拆分为键值对
  • 在每对上调用pair.Split('=')将其拆分为键和值

请注意,string.Split有各种重载,您可能希望查看有关要返回的字符串数量的选项,是否抑制空值等。

答案 1 :(得分:1)

我最近遇到过类似的问题。这是一段可能对您有用的代码。策略与Jon Skeet's anwers中的策略相同。

看起来这些键在您的文本块中是唯一的,因此您可以使用Dictionary

string[] pairs = block.Split(';');
Dictionary<string, string> values = new Dictionary<string, string>();

foreach (var element in pairs)
{
    var tmp = element.Split('=');
    var key = tmp[0];
    var val = tmp.Length == 2 ? tmp[1] : string.Empty;
    values.Add(key,val );   
}

foreach (var el in values)
{
    Console.WriteLine(el);
}

答案 2 :(得分:1)

这里是单行(为清晰起见,格式化为多行)。

Dictionary<string, string> dictionary = raw
    .Split(new [] { ';', }, StringSplitOptions.RemoveEmptyEntries)
    .Select(x => x.Split('='))
    .ToDictionary(x => x[0], x => x[1]);

答案 3 :(得分:0)

我会使用String.Split(Char[])。调整示例,您需要string [] split = words.Split(new Char [] {';'});