从逗号分隔的字符串中的键值对中获取值

时间:2014-01-22 15:11:59

标签: c#

我有如下字符串值:

var result = "{DimensionTransactionMonth=August, DimensionTransactionYear=2012}"

我需要改变如下:

var finalResult = "August,2012";

有谁知道怎么做?

6 个答案:

答案 0 :(得分:4)

这是一个单行,所以我看起来很聪明,它不依赖于键值对的Count

var result = "{DimensionTransactionMonth=August, DimensionTransactionYear=2012}";

var stringValues = string.Join(",", result.Trim('{', '}').Split(',').Select(x => x.Split('=')[1]));

Console.Write(stringValues);

输出:

August,2012

话虽如此,我会选择Sergey Berezovskiy的IDictionary查询解决方案。

<强>解释

result.Trim('{', '}').Split(',').Select(x => x.Split('=')[1])

细分:

1. .Trim('{', '}')

移除外部花括号。

结果:“DimensionTransactionMonth = August,DimensionTransactionYear = 2012”

2. .Split(',')

将第一步的结果转换为','

上的数组拆分

结果:[“DimensionTransactionMonth = August”,“DimensionTransactionYear = 2012”]

3. .Select(x => x.Split('=')[1])

将第2步中的每个项目投射到IEnumerable<string>,同时将其Splits "DimensionTransactionMonth=August"投放到["DimensionTransactionMonth","August"]中,我们将该数组中的最后一个值{{1} }

不,我们可以使用"August"加入此IEnumnerable<string>,如下所示:

string.Join(',' ...)

答案 1 :(得分:3)

因此,您正在处理kev值对,我会将您的输入转换为Dictionary<string,string>

var result = "{DimensionTransactionMonth=August, DimensionTransactionYear=2012}";
var settings = result.Trim('{', '}')
                     .Split(',')
                     .Select(s => s.Trim().Split('='))
                     .ToDictionary(a => a[0], a => a[1]);

现在您可以轻松获得最终结果:

var finalResult = String.Join(",", settings.Values); // "August,2012"

或按键的某些特定值:

var month = settings["DimensionTransactionMonth"]; // "August"

答案 2 :(得分:1)

您需要执行3个步骤(如果您希望手动执行此操作)。

删除括号

var s = result.SubString(1, result.Length - 2);

拆分键值对

var pairs = s.Split(new[]{','});

通过拆分=符号

来提取值
var resultset = pairs.Select(x => x.Split(new[]{'='})[1]).ToList();

答案 3 :(得分:1)

var values = string.Join(",", result.Split(',').Select(o => o.Split(new[] { '=', '{', '}' })[1]));

答案 4 :(得分:1)

没有正则表达式(如果只有那两对):

string text = "{DimensionTransactionMonth=August, DimensionTransactionYear=2012}";
var token = text.Trim('{', '}').Split(',').Select(t => t.Trim());
string month = token.First().Split('=').Last().Trim();
string year = token.Last().Split('=').Last().Trim();
string finalResult = string.Format("{0},{1}", month, year);;

答案 5 :(得分:0)

你可以使用string.Replace();和string.Split();

var result = "{DimensionTransactionMonth=August, DimensionTransactionYear=2012}"

var splitValues = result.Replace("{","").Replace("}","").Split(",");

var month = splitValues[0].Split("=")[1];

var year = splitValues[1].Split("=")[1];

var finalResult = string.Format("{0},{1}", month, year);