这是我当前字符串的样子:
Data={Person, Id, Destination={Country, Price}}
它也可能看起来像这样
Data={Person, Id, Specification={Id, Destination={Country, Price}}}
我需要的是一种搜索整个字符串并能够获得的方法:
搜索数据,然后在第一个和最后一个括号之间获取整个数据 数据= {获取此}
然后,根据获得的数据,我应该能够得到:
Person,Id,那么如果我发现规范与数据相同,则将内容放到最后一个括号内,然后对目标执行相同操作。
任何线索我该怎么办?我正在使用C#。
答案 0 :(得分:1)
检索大括号之间的所有内容的函数:
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(',')来检索人和 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
答案 1 :(得分:0)
你可以尝试这样的事情 -
string str = "Data={Person, Id, Specification={Id, Destination={Country, Price}}}";
string[] arr = str.Split(new char[]{'{','}','=',','},StringSplitOptions.RemoveEmptyEntries).Where(x => x.Trim().Length != 0).Select(x => x.Trim()).ToArray();
foreach(string s in arr)
Console.WriteLine(s);
Where(x => x.Trim().Length != 0)
部分用于删除仅包含空格的字符串。
Select(x => x.Trim())
部分用于删除所有子串的前导和尾随空格。
结果出来
Data
Person
Id
Specification
Id
Destination
Country
Price
所以现在你可以迭代数组并解析数据。基本逻辑将是
if(arr [i] ==“Data”)然后接下来的两个项目是person和id
如果(arr [i] ==“目的地”)则接下来的两个项目将是id和目的地
if(arr [i] ==“specification”)然后接下来的两个项目是国家和价格