检索大括号之间所有内容的函数:
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;
}
然后使用函数检索内容:
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...
}
输出是:
Person, Id, Specification={Id, Destination={Country, Price}}
Id, Destination={Country, Price}
您不能使用string.Split(',')来检索Person和Id,因为它还会在括号之间拆分字符串,而您不希望这样。而是从正确的位置使用建议的string.IndexOf两次,您将正确获得子字符串:
// 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() } };
}
该函数应该用于检索到的内容:
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"]));
}
输出是:
Person, Id, Specification={Id, Destination={Country, Price}} // Person // Id
Id, Destination={Country, Price}
Id, Destination={Country, Price} // Id // Destination