使用regex从字符串构建字典
本文关键字:构建 字典 字符串 regex 使用 | 更新日期: 2023-09-27 18:10:14
假设我有这样一个字符串:
var results =
[{'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 '"ninja'": '"Donatello - $0.25'",'r'n '"data'": [[1361061084420,0.23],[1366102471587,0.25],[1366226367262,0.25],[1366284992043,0.25]]},
'r'n{'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 '"ninja'": '"Michelangelo - $0.14'",'r'n '"data'": [1366284992043,0.14]]};
我想建立一个字典来存储忍者的名字和价格,这样我就可以:
关键字'值
莱昂纳多' 0.99
多纳泰罗' 0.25
拉斐尔' 0.15
米开朗基罗' 0.14
所以我已经读了很多关于regex的几天,我不知道它是如何工作的。到目前为止,我有这行代码:
var dictNinjas = Regex.Matches(priceListValue, @"'*('w+)=(a-zA-Z)|'*('$(0-9))").Cast<Match>()
.ToDictionary(x => x.Groups[0].Value,
x => x.Groups[1].Value);
我的理解是,它将首先查找所有包含字母a-zA-Z的单词,然后查找位于$符号后面的所有值。符号是分组,所以第一个参数是组0,第二个参数是组1。但这行不通。
有谁能帮我吗?我正在努力理解如何使它工作,谢谢。Groups[0].Value
是完全匹配的,所以您需要1
和2
var dictNinjas = Regex.Matches(str, @"""('w+) - '$(['d.]+)").Cast<Match>()
.ToDictionary(x => x.Groups[1].Value,
x => x.Groups[2].Value);
Groups[1].Value
是指regex中第一个()
捕获的内容,第二个`Groups[2].Value
捕获的内容。
我不知道为什么你有一个=
在你的正则表达式,但t看起来你已经误解了一些东西。
first:
,所以第一个参数是组0,第二个参数是组1
- 组0是整个匹配字符串
- 组1是连接到第一个右括号的组。
这个站点有一个非常方便的正则表达式测试工具,以及大量的正则信息-只要记住,当你把你的正则表达式搜索字符串到c#中,你可能需要转义更多的字符,逐字逐句可能无法正确解释。
例如:我插入('w+) - '$('d+'.'d{2})
作为我的正则字符串,并得到:
第一场比赛:莱昂纳多- 0.99美元,第24位背景资料:1美元=莱昂纳多2美元= 0.99美元额外的匹配:发现:多纳泰罗- $0.25,位置217发现:拉斐尔- $0.15,位置369发现:米开朗基罗- $0.14在第566位