我想使用正则表达式
拆分下面的字符串Country:Subdivision, Level1:{Level2a:{Level3a, Level3b}, Level2b}
形成
Country
Subdivision
Level1
Level2a
Level3a
Level3b
Level2b
我知道会有一个递归函数将字符串拆分成上面的形式。
我正在使用.net,并希望将字符串拆分为类
public class ListHierarchy
{
public string Name { get; set; }
public ListHierarchy ParentListHierarchy { get; set; }
}
以下概念(输出):
var list1 = new ListHierarchy() { Name = "Country" };
var list2 = new ListHierarchy() { Name = "Subdivision", ParentListHierarchy = list1 };
var list3 = new ListHierarchy() { Name = "Level1" };
var list4 = new ListHierarchy() { Name = "Level2a", ParentListHierarchy = list3 };
var list5 = new ListHierarchy() { Name = "Level2b", ParentListHierarchy = list3 };
var list6 = new ListHierarchy() { Name = "Level3a", ParentListHierarchy = list4 };
var list7 = new ListHierarchy() { Name = "Level3b", ParentListHierarchy = list4 };
伙计们,我已经解决了问题,但仍然需要对正则表达式进行微调
public static Dictionary<string, string> SplitToDictionary(string input, string regexString)
{
Regex regex = new Regex(regexString);
return regex.Matches(input).Cast<Match>().ToDictionary(x => x.Groups[1].Value.Trim(), x => x.Groups[2].Value.Trim());
}
string input = "Country:Subdivision, Level1:{Level2a:{Level3a:Level4a, Level3b}, Level2b}";
var listHierarchy = new List<ListHierarchy>();
Dictionary<string, string> listParent = SplitToDictionary(input, @"([\w\s]+):(([\w\s]+)|([\w\s\,\{\}\:]+))");
但是,我得到了
{Level2a:{Level3a, Level3b}, Level2b}
而不是
Level2a:{Level3a, Level3b}, Level2b
答案 0 :(得分:0)
我喜欢正则表达式,但对于这个问题,它们不是正确的工具。
Irony是一个非常棒且易于使用的库,可以让你为类似json的东西编写解析器。
它是免费的,开源的,示例包括一个json解析器,您可以根据自己的需要进行调整。
答案 1 :(得分:-2)
你可以使用这个正则表达式
([^\s,:{}])+
这将使你获得国家细分级别1 Level2a Level3a Level3b Level2b。 你必须把它放到一个数组中,然后根据你的风格推出它。
修改强>
这会主动破坏JSON层次结构,因此不建议用于此问题/情况。这只会返回可以存储在数组中的字符串。