В программе я читаю некоторые файлы данных, часть из которых отформатирована в виде серии записей, каждая в квадратных скобках. Каждая запись содержит заголовок раздела и серию пар ключ / значение.
Первоначально я написал код для обхода и извлечения значений, но решил, что это можно сделать более элегантно с помощью регулярных выражений. Ниже приведен мой полученный код (я только что его взломал в консольном приложении - поэтому знайте, что имена переменных не так уж хороши и т. Д.)
Можете ли вы предложить улучшения? Я чувствую, что нет необходимости делать два совпадения и подстроку, но не могу понять, как сделать все это за один большой шаг:
string input = "[section1 key1=value1 key2=value2][section2 key1=value1 key2=value2 key3=value3][section3 key1=value1]";
MatchCollection matches=Regex.Matches(input, @"\[[^\]]*\]");
foreach (Match match in matches)
{
string subinput = match.Value;
int firstSpace = subinput.IndexOf(' ');
string section = subinput.Substring(1, firstSpace-1);
Console.WriteLine(section);
MatchCollection newMatches = Regex.Matches(subinput.Substring(firstSpace + 1), @"\s*(\w+)\s*=\s*(\w+)\s*");
foreach (Match newMatch in newMatches)
{
Console.WriteLine("{0}={1}", newMatch.Groups[1].Value, newMatch.Groups[2].Value);
}
}