通过正则表达式拆分json相似的字符串

时间:2012-02-10 07:52:24

标签: c# regex arrays

我想使用正则表达式

拆分下面的字符串
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 

2 个答案:

答案 0 :(得分:0)

我喜欢正则表达式,但对于这个问题,它们不是正确的工具。

Irony是一个非常棒且易于使用的库,可以让你为类似json的东西编写解析器。

它是免费的,开源的,示例包括一个json解析器,您可以根据自己的需要进行调整。

答案 1 :(得分:-2)

你可以使用这个正则表达式

([^\s,:{}])+

这将使你获得国家细分级别1 Level2a Level3a Level3b Level2b。 你必须把它放到一个数组中,然后根据你的风格推出它。

修改

这会主动破坏JSON层次结构,因此不建议用于此问题/情况。这只会返回可以存储在数组中的字符串。