正则表达式以匹配具有递归的逗号分隔平衡方括号
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);
}
}
它基本上保持括号的计数,当它看到一个逗号时,当左括号的数量为零时,它会从之前的拆分中拆分出一个新字符串。
注意:这没有任何代码来检查输入是否有效(具有所有平衡括号),因此它留在最外面的括号中以防万一。
我想要一个正则表达式来匹配逗号分隔的平衡方括号,其中方括号的内容本身可能是逗号分隔的平衡方括号。
这里有一些例子:
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);
}
}
它基本上保持括号的计数,当它看到一个逗号时,当左括号的数量为零时,它会从之前的拆分中拆分出一个新字符串。
注意:这没有任何代码来检查输入是否有效(具有所有平衡括号),因此它留在最外面的括号中以防万一。