2015-11-02 67 views
-1

提取关键值对我需要解析的内容较长块:C#从字符串

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

我需要得到字典或任何结构,我可以通过(数组,集合等)循环。 到目前为止,我在看两个选项:正则表达式或某种拆分到数组中。

+0

你的问题是什么? –

+0

对不起,问题是我如何提取对(key1,value1),(key2,value2),(key3,value3)? – shiraz

回答

0

尝试此图案:

(\w+)="(.+?)" 

然后在每个迭代匹配,并提取Group[1].Value(键),Group[2].Value(值)。

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,则需要对其进行调整。

它还允许在=周围的可选空间,但如果需要可以拧紧。

+0

这可能是最接近我正在寻找的东西,它向我证实我必须分两步做,而不是一次性完成所有事情 – shiraz