正则表达式以匹配具有递归的逗号分隔平衡方括号

regex to match comma delimited balanced square brackets having recursion

我想要一个正则表达式来匹配逗号分隔的平衡方括号,其中方括号的内容本身可能是逗号分隔的平衡方括号。

这里有一些例子:

example 1
input = "[abc],[def]"
groups 
    group 1 = "abc"
    group 2 = "def"

example 2
input = "[[ghi],[jkl]],[mno[pqr]],[[stu]]"
groups
    group 1 = "[ghi],[jkl]"
    group 2 = "mno[pqr]"
    group 3 = "[stu]"

所以请注意,在第二个示例中,"ghi" 和 "jkl" 不是他们自己的组。我不需要一直递归下去,我只需要一个正则表达式来找到 "level 0" 组。

这里有一些代码可以帮助您开始解析这些值。

public static IEnumerable<string> SplitSquareBraketByComma(string input)
{
    int start = 0;
    int brakets = 0;
    for(int i = 0; i < input.Length; i++)
    {
        if(input[i] == '[') 
        {
            brakets++;
            continue;
        }

        if(input[i] == ']')
        {
            brakets--;
            continue;
        }

        if(brakets == 0 && input[i] == ',')
        {
            yield return input.Substring(start, i - start);
            start = i + 1;
        }
    }

    if(start < input.Length)
    {
        yield return input.Substring(start);
    }
}

它基本上保持括号的计数,当它看到一个逗号时,当左括号的数量为零时,它会从之前的拆分中拆分出一个新字符串。

注意:这没有任何代码来检查输入是否有效(具有所有平衡括号),因此它留在最外面的括号中以防万一。