Function to retrieve everything between the curly braces:
public string retrieve(string input)
{
var pattern = @"\{.*\}";
var regex = new Regex(pattern);
var match = regex.Match(input);
var content = string.Empty;
if (match.Success)
{
// remove start and end curly brace
content = match.Value.Substring(1, match.Value.Length - 2);
}
return content;
}
Then using the function retrieve the contents:
var input = @"Data={Person, Id, Specification={Id, Destination={Country, Price}}}";
var content = retrieve(input);
Console.Out.WriteLine(content);
if (!string.IsNullOrEmpty(content))
{
var subcontent = retrieve(content);
Console.Out.WriteLine(subcontent);
// and so on...
}
The output is:
Person, Id, Specification={Id, Destination={Country, Price}}
Id, Destination={Country, Price}
You can not use string.Split(',') to retrieve Person and Id because it would also split the strings between the brackets and you do not want this. Instead use as suggested string.IndexOf two times from the correct position and you will have the substrings correctly:
// TODO error handling
public Dictionary<string, string> getValues(string input)
{
// take everything until =, so string.Split(',') can be used
var line = input.Substring(0, input.IndexOf('='));
var tokens = line.Split(',');
return new Dictionary<string, string> { { "Person" , tokens[0].Trim() }, { "Id", tokens[1].Trim() } };
}
The function should be used on the retrieved content:
var input = @"Data={Person, Id, Specification={Id, Destination={Country, Price}}}";
var content = retrieve(input);
var tokens = getValues(content);
Console.Out.WriteLine(string.Format("{0} // {1} // {2}", content, tokens["Person"], tokens["Id"]));
if (!string.IsNullOrEmpty(content))
{
var subcontent = retrieve(content);
Console.Out.WriteLine(subcontent);
var subtokens = getValues(subcontent);
Console.Out.WriteLine(string.Format("{0} // {1} // {2}", subcontent, subtokens["Person"], subtokens["Id"]));
}
And the output is:
Person, Id, Specification={Id, Destination={Country, Price}} // Person // Id
Id, Destination={Country, Price}
Id, Destination={Country, Price} // Id // Destination