You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#正则检查嵌套括号深度及实现嵌套frac结构分组捕获?

C#正则表达式相关问题解答

问题1:如何使用C#正则表达式检查嵌套括号的深度?

可以借助C#正则支持的平衡组跟踪括号的开闭状态,配合代码计算最大嵌套深度:

  • 用(?<open>\{)匹配左括号时,相当于将标记入栈;用(?<-open>\})匹配右括号时,将标记出栈;
  • 遍历匹配过程,实时记录当前的嵌套深度,同步更新最大深度值。

示例代码:

string input = "frac{frac{1}{2}}{frac{3}{frac{4}{frac{5}{6}}}}";
Regex regex = new Regex(@"(?<open>\{)|(?<-open>\})|[^{}]+");
int maxDepth = 0;
int currentDepth = 0;

foreach (Match match in regex.Matches(input))
{
    if (match.Groups["open"].Success)
    {
        currentDepth++;
        maxDepth = Math.Max(maxDepth, currentDepth);
    }
    else if (currentDepth > 0)
    {
        currentDepth--;
    }
}

Console.WriteLine($"最大嵌套深度:{maxDepth}"); // 输出:4

问题2:能否通过正则表达式实现按深度捕获指定分组?

无法直接通过正则表达式实现。原因如下:

  • C#正则的捕获组是静态定义的,无法根据嵌套层级动态生成新的捕获组(比如需求中的group2.1、group3这类随深度变化的分组);
  • 平衡组只能匹配完整的嵌套结构,但不能自动将多层嵌套的内容拆分为独立的捕获组。

要实现按深度提取各层级的frac{...}{...}结构,更可行的方式是迭代/递归提取:

  1. 用平衡组正则匹配最外层的frac结构;
  2. 对匹配得到的分子、分母部分,重复执行匹配逻辑,逐层提取内层的frac内容。

示例代码:

string input = "frac{frac{1}{2}}{frac{3}{frac{4}{frac{5}{6}}}}";
Regex fracRegex = new Regex(@"frac\{((?:[^{}]|(?<open>\{)|(?<-open>\}))*)\}\{((?:[^{}]|(?<open>\{)|(?<-open>\}))*)\}(?(open)(?!))");

List<string> extractedFracs = new List<string>();
Queue<string> processQueue = new Queue<string>();
processQueue.Enqueue(input);

while (processQueue.Count > 0)
{
    string currentContent = processQueue.Dequeue();
    Match match = fracRegex.Match(currentContent);
    if (match.Success)
    {
        extractedFracs.Add(currentContent);
        // 处理分子部分
        string numerator = match.Groups[1].Value;
        if (numerator.StartsWith("frac{"))
        {
            processQueue.Enqueue($"frac{{{numerator}}}");
        }
        // 处理分母部分
        string denominator = match.Groups[2].Value;
        if (denominator.StartsWith("frac{"))
        {
            processQueue.Enqueue($"frac{{{denominator}}}");
        }
    }
}

// 输出结果依次为:完整文本、frac{1}{2}、frac{3}{frac{4}{frac{5}{6}}}、frac{4}{frac{5}{6}}、frac{5}{6}
foreach (var item in extractedFracs)
{
    Console.WriteLine(item);
}

内容的提问来源于stack exchange,提问作者user10423802

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:53:34