【发布时间】:2013-06-14 16:54:03
【问题描述】:
我正在尝试解析一个字符串并构建一个字典,该字典将包含字段名称及其作为键/值的值。
代码如下:
var dictPriceList = Regex.Matches(priceListToParse, @"""(.+?) - \$([\d.]+)").Cast<Match>()
.ToDictionary(x => x.Groups[1].Value,
x => x.Groups[2].Value);
这是我需要解析的字符串示例:
var results =
[{\r\n\t\"bandanaColor\": \"rgb(0,0,255)\",\r\n \"ninja\": \"Leonardo - $0.99\",\r\n \"data\": [[1336485655241,0.99],[1336566333236,0.99],[1336679536073,0.99],[1336706394834,0.99],[1336774593068,0.99],[1366284992043,0.99]]},
\r\n{\r\n\t\"bandanaColor\": \"rgb(128,0,128)\",\r\n \"ninja\": \"Donatello - $0.25\",\r\n \"data\": [[1361061084420,0.23],[1366102471587,0.25],[1366226367262,0.25],[1366284992043,0.25]]},
\r\n{\r\n\t\"bandanaColor\": \"rgb(255,0,0)\",\r\n \"ninja\": \"Raphael - $0.15\",\r\n \"data\": [[1327305600000,0.15], [1365583220422,0.15],[1365669396241,0.15],[1365669396241,0.15],[1365753433493,0.15],[1366284992043,0.15]]},\r\n\
r\n{\r\n\t\"bandanaColor\": \"rgb(255,165,0)\",\r\n \"ninja\": \"Michelangelo - $0.14\",\r\n \"data\": [1366284992043,0.14]};
在这里,我需要的唯一值是标签“ninja”和“Leonardo - 0.99 美元”。所以我最终会得到这些值:
键\值
莱昂纳多\0.99
多纳泰罗\0.25
拉斐尔\0.15
米开朗基罗\0.14
好的,我已经尝试过这个问题并得到了大家的帮助,我很感激,但从那以后我没有机会尝试我的手。但从那时起,添加了t\"bandanaColor\": \"rgb(0,0,255)\", 行,我需要忽略它,因为它与我想做的事情无关。现在这条线崩溃了,我想,是因为这条线。
谁能帮我弄清楚如何获得我想要的东西?
编辑
当代码到达正则表达式行时,这是我得到的崩溃:
An item with the same key has already been added.
【问题讨论】:
-
Newtsonsoft 的 Json.NET 会让这变得更容易(无需尝试使用正则表达式破解它)。
-
我不是第一次听说 Json.Net!但我不知道它是如何工作的。我去看看,但这并不能解决我现在的问题
-
使用正则表达式并不能解决您的问题。如果你要解析 JSON 数据,你不能不使用为吃、睡和呼吸 JSON 对象而编写的解析器。
-
哦,好的。因此,如果我理解得很好,我正在阅读的是一个 JSon 对象,并且由于我将它收集在一个字符串中并尝试在其上使用正则表达式,我只会让它变得更难?
-
另外,你有 JSON 错误(最后一个
data:应该是data: [[...]](它是一个双数组,但只从一个开头开始[--可能是复制粘贴错误?)
标签: c# regex string dictionary