这是基于索引进行搜索的尝试:(我更喜欢我添加的 LINQ 解决方案)
string test = "N:Pay in Cash++RGI:40++R:200++T:Purchase++IP:N++IS:N++PD:PC++UCP:598.80++UPP:0.00++TCP:598.80++TPP:0.00++QE:1++QS:1++CPC:USD++PPC:Points++D:Y++E:Y++IFE:Y++AD:Y++IR:++MV:++CP:~ ~N:ERedemption++RGI:42++R:200++T:Purchase++IP:N++IS:N++PD:PC++UCP:598.80++UPP:0.00++TCP:598.80++TPP:0.00++QE:1++QS:1++CPC:USD++PPC:Points++D:Y++E:Y++IFE:Y++AD:Y++IR:++MV:++CP:";
string[] parts = test.Split(new string[] { "~ ~" }, StringSplitOptions.None);
var result = parts.Select(p => new
{
N = p.Substring(p.IndexOf("N:") + 2,
p.IndexOf("++") - (p.IndexOf("N:") + 2)),
RGI = p.Substring(p.IndexOf("RGI:") + 4,
p.IndexOf("++", p.IndexOf("RGI:")) - (p.IndexOf("RGI:") + 4))
});
创建具有以下值的两个对象的列表:
result = {{N = "Pay in Cash", RDI = 40}, {N = "ERedemption", RDI = 42}}
编辑:使用 LINQ 的解决方案
我决定尝试使用 LINQ 来完成这一切,这就是我想出的:
string test = "N:Pay in Cash++RGI:40++R:200++T:Purchase++IP:N++IS:N++PD:PC++UCP:598.80++UPP:0.00++TCP:598.80++TPP:0.00++QE:1++QS:1++CPC:USD++PPC:Points++D:Y++E:Y++IFE:Y++AD:Y++IR:++MV:++CP:~ ~N:ERedemption++RGI:42++R:200++T:Purchase++IP:N++IS:N++PD:PC++UCP:598.80++UPP:0.00++TCP:598.80++TPP:0.00++QE:1++QS:1++CPC:USD++PPC:Points++D:Y++E:Y++IFE:Y++AD:Y++IR:++MV:++CP:";
var result = test.Split(new string[] { "~ ~" }, StringSplitOptions.None).
Select(m => m.Split(new string[] { "++" }, StringSplitOptions.None)).
Select(p => p.Select(i => i.Split(':')).
Where(o => o[0].Equals("N") || o[0].Equals("RGI")).
Select(r => new { Key = r[0], Value = r[1]}));
它为每个包含只有 N 和 RGI 的键值对的项目生成和数组。
result = {{{Key = "N", Value = "Pay in Cash"}, {Key = "RDI", Value = 40}},
{{Key = "N", Value = "ERedemption"}, {Key = "RDI", Value = 42}}}
如果你愿意,你可以删除Where
它,它将包括所有的键和它们的值。