2012-11-28 56 views
1

我只是试图找到类似的东西来解决问题,但我只发现了一些“零件”,我不知道如何将它们合并。所以我希望任何人都可以帮助我。问题:RegEx拆分数组(字符串)与嵌套数组

我有一个字符串,它包含一个(或多个)嵌套数组的数组。

[1, 'AB C',[1, 'AB C', “ABC”], “ABC”]

或也许

[1,[” AB C '],' 一”,[1, “ABC”], “ABC”]

等等

我想在我的结果顶部阵列分裂了用逗号分隔,但有嵌套数组,包括逗号,但没有括号。

例如,对于用于第一字符串:

[0] - > 1

[1] - > 'ABC'

[2] - > 1, 'AB C', “ABC”

[3] - > “ABC”

我当前正则表达式,其提供我的分裂顶部阵列为:

/\ [[\ W \ d \ S \,\ '\ “] +] | [\ W \ d \ S \” \'] + /克

但现在我不知道如何更改我的正则表达式以“剪切”内部括号... 我已经尝试了使用lookaheads/-behinds,单词边界,组等的不同方式,但没有任何成功。那甚至有可能?如果是,如何?

也许我选择了错误的方法,但我需要说我是新的正则表达式。 因此,如果前者不太正确,请让我发觉。

非常感谢您的帮助!

马尔科

+0

什么语言,你”重新使用? – inhan

+0

什么是你分裂的文字?它看起来像JSON。什么创造了文字?如果它是一个众所周知的格式,而不是你刚才制作的,那么可能有现成的代码来为你解析。 –

回答

0

尝试

String[] parts = string.substring(1,string.length()-1).split(","); 
for (int n = 0; n < parts.length; n++) { 
    if (parts.charAt(0) == '[') parts[n] = parts[n].substring(1,parts[n].length()-1); 
} 

字面上做你所说的话

顶部阵列由逗号分裂了,但有没有括号的嵌套数组。

有时候,编程可以是简单的:)

0

这种分裂正则表达式是相当难看,但你想要做什么。从我可以通过使用RegexBuddy得知,它只能在.NET中工作。

(?<=^\[(?:(?>\[[^\]\[]+(?:\]|(?=\])))|(?>[^\[\]]+))*|^)[,\[\]]+ 

,因为我喜欢用正则表达式,在这种情况下,我认为我会这样(用C#编写)的一个小功能是差不多:

string[] DeserializeArray(string serializedArray) { 
    const char OPEN_GROUP = '[', CLOSE_GROUP = ']', DELIMITER = ','; 
    List<string> deserializedArray = new List<string>(); 
    StringBuilder accumulator = new StringBuilder(); 
    int nestDepth = 0; 
    int baseDepth = serializedArray[0] == OPEN_GROUP ? 1 : 0; 
    for(int i=0; i<serializedArray.Length; ++i){ 
     if(serializedArray[i] == OPEN_GROUP) ++nestDepth; 
     else if(serializedArray[i] == CLOSE_GROUP) --nestDepth; 
     else if(serializedArray[i] == DELIMITER && nestDepth <= baseDepth) { 
      deserializedArray.Add(accumulator.ToString()); 
      accumulator.Clear(); 
     } 
     else { 
      accumulator.Append(serializedArray[i]); 
     } 
    } 
    deserializedArray.Add(accumulator.ToString()); 
    return deserializedArray.ToArray(); 
}