2015-11-02 2 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

Смежные вопросы