c#从字符串中提取键值对

时间:2015-11-02 15:40:38

标签: .net arrays regex replace

我需要解析更长的内容块:

content block 1
content block 2 key1="value1" key2="val2" some other content
content block 3 key3="value3" other content
more content 

我需要获得一个字典或任何我可以遍历的结构(数组,集合等)。 到目前为止,我正在考虑两个选项:正则表达式或某种分裂成阵列。

2 个答案:

答案 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(值)。