拆分JSON一樣串我想通過使用正則表達式表達由正則表達式表達
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
相信我,你不想爲此使用正則表達式。你想要一個JSON解析器。我很確定你使用的語言(你沒有指定)已經有一個。 – 2012-02-10 07:56:36
實際上,因爲這不是有效的JSON,所以你不需要JSON解析器,但是你需要一個[遞歸下降解析器](http://en.wikipedia.org/wiki/Recursive_descent_parser)。 – 2012-02-10 08:06:53
我創建了一個字符串來存儲我的動態層次結構列表,併爲我的字符串設計選擇了json格式。它不是JSON,而是JSON類似的字符串。 – agent99 2012-02-10 08:09:25