我需要解析更长的内容块:
content block 1 content block 2 key1="value1" key2="val2" some other content content block 3 key3="value3" other content more content
我需要获得一个字典或任何我可以遍历的结构(数组,集合等)。 到目前为止,我正在考虑两个选项:正则表达式或某种分裂成阵列。
答案 0 :(得分:1)
也许是这样的:
string text = @"
content block 1
content block 2 key1=""value1"" key2=""val2"" some other content
content block 3 key3=""value3"" other content
more content
";
var pattern = @"(?<key>\w+)\s*=\s*""(?<value>[^""]*)""";
var matches = Regex.Matches(text, pattern);
var dictionary = new Dictionary<string, string>();
foreach (Match match in matches)
dictionary.Add(match.Groups["key"].Value, match.Groups["value"].Value);
您可能需要微调模式。对于密钥,它会抓取集合[A-Za-z0-9_]
中的任何内容,后跟=
个符号。
该值是"
符号后引号内的=
内的任何值。但是,如果您的值字符串中包含"
s,则需要对其进行调整。
它还允许=
周围的可选空格,但如果需要,你可以收紧它。
答案 1 :(得分:0)
尝试这种模式:
(\w+)="(.+?)"
然后迭代每个匹配并提取Group[1].Value
(密钥),Group[2].Value
(值)。