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

C#如何拆分带括号嵌套的逗号分隔字符串并按规则展开

C# 嵌套结构逗号分隔字符串拆分方案

实现思路

因为字符串存在括号嵌套结构,括号内部的逗号不属于顶层分隔符,不能直接用String.Split拆分全局逗号,核心逻辑如下:

  • 遍历字符串维护括号深度,仅拆分括号深度为0时的逗号,得到所有顶层元素(如a(x,y,z)、b、c(n,o,p)等)
  • 逐个处理顶层元素:无括号的元素直接保留;带括号的元素提取前缀和括号内的参数,将每个参数拼接为前缀(参数)格式
  • 合并所有处理后的元素得到最终结果

完整实现代码

using System;
using System.Collections.Generic;
using System.Text;

public static class NestedStringProcessor
{
    public static string Process(string input)
    {
        List<string> processedItems = new List<string>();
        List<string> topLevelItems = SplitTopLevelComma(input);

        foreach (string item in topLevelItems)
        {
            int leftBracketIndex = item.IndexOf('(');
            // 无括号的普通项直接保留
            if (leftBracketIndex == -1)
            {
                processedItems.Add(item.Trim());
                continue;
            }
            // 提取前缀和参数列表
            string prefix = item.Substring(0, leftBracketIndex).Trim();
            int rightBracketIndex = item.LastIndexOf(')');
            string paramPart = item.Substring(leftBracketIndex + 1, rightBracketIndex - leftBracketIndex - 1).Trim();
            string[] parameters = paramPart.Split(',', StringSplitOptions.RemoveEmptyEntries);

            foreach (string param in parameters)
            {
                processedItems.Add($"{prefix}({param.Trim()})");
            }
        }

        return string.Join(',', processedItems);
    }

    // 仅拆分顶层逗号(括号外的逗号)
    private static List<string> SplitTopLevelComma(string input)
    {
        List<string> items = new List<string>();
        StringBuilder currentItem = new StringBuilder();
        int bracketDepth = 0;

        foreach (char c in input)
        {
            switch (c)
            {
                case '(':
                    bracketDepth++;
                    currentItem.Append(c);
                    break;
                case ')':
                    bracketDepth--;
                    currentItem.Append(c);
                    break;
                case ',':
                    if (bracketDepth == 0)
                    {
                        items.Add(currentItem.ToString());
                        currentItem.Clear();
                    }
                    else
                    {
                        currentItem.Append(c);
                    }
                    break;
                default:
                    currentItem.Append(c);
                    break;
            }
        }

        if (currentItem.Length > 0)
        {
            items.Add(currentItem.ToString());
        }

        return items;
    }

    // 测试调用
    public static void Main()
    {
        string input = "a(x,y,z),b,c(n,o,p),d,e,f(t,w)";
        string output = Process(input);
        Console.WriteLine(output);
        // 输出:a(x),a(y),a(z),b,c(n),c(o),c(p),d,e,f(t),f(w)
    }
}

适配说明

如果实际输入存在多括号嵌套、括号前后带空格等情况,只需要调整括号深度计数逻辑和空格处理逻辑即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:42:00