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

C#中按括号分割字符串并保留所有内容到数组的方法

在C#中按括号分割字符串并保留所有内容

嘿,这个需求用正则表达式就能完美解决!你需要的是分割字符串但保留作为分割依据的括号片段,C#的Regex.Split方法刚好支持这个——只要把匹配括号的模式用捕获组包裹,捕获到的内容就会被保留在结果数组里。

具体实现步骤

  1. 正则模式设计:我们需要匹配完整的括号及内部内容,模式可以写成:(\([^()]+\))

    • \(:匹配左括号(转义是因为括号在正则里是特殊字符)
    • [^()]+:匹配任意非括号的字符,确保只匹配到对应的右括号
    • \):匹配右括号
    • 整个用()包裹成捕获组,这样Regex.Split会把匹配到的括号片段也加入结果数组
  2. 代码示例:

using System;
using System.Text.RegularExpressions;

public class StringSplitExample
{
    public static void Main()
    {
        string input = " hmmmmmmmm (asdfhqwe)asasd ";
        // 匹配完整的括号及内部内容的正则
        string splitPattern = @"(\([^()]+\))";
        string[] splitResult = Regex.Split(input, splitPattern);

        // 遍历输出结果(可以过滤空字符串,避免分割后出现空项)
        foreach (string segment in splitResult)
        {
            if (!string.IsNullOrWhiteSpace(segment))
            {
                Console.WriteLine($"分割结果:\"{segment}\"");
            }
        }
    }
}

运行结果

对于你的示例输入,运行后会输出:

分割结果:" hmmmmmmmm "
分割结果:"(asdfhqwe)"
分割结果:"asasd "

如果你的输入中括号前后带有空格(比如" hmmmmmmmm (asdfhqwe) asasd "),结果会自动保留这些空格,完全符合你的需求。

注意事项

  • 这个正则只适用于非嵌套括号的场景,如果需要处理(a(b)c)这种嵌套情况,得用递归正则表达式,模式会变成(\((?>[^()]+|(?1))*\)),感兴趣的话可以试试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:46:34