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

C#实现分割字符串并保留分隔符的方法

C# 分割字符串并保留分隔符的解决方案

针对你提出的需求,这里可以通过正则表达式的正向预查断言实现分割时保留分隔符(即示例中的(数字)前缀),具体方案如下:

实现思路

利用正则的零宽度正向预查(?=...),匹配每个(数字)前缀的起始位置作为分割点。这种断言只会匹配位置,不会"消耗"分隔符本身,因此分割后的每个结果项会自动包含对应的前缀及后续内容。

完整代码示例

using System;
using System.Linq;
using System.Text.RegularExpressions;

class StringSplitDemo
{
    static void Main()
    {
        string stringToSplit = "(10)12345(20)dk34jf(3)li33";
        // 正则模式:匹配任意(数字)前缀的起始位置
        string splitPattern = @"(?=\(\d+\))";
        
        // 分割后过滤空字符串(原字符串开头是分隔符,会产生空项)
        string[] splitResult = Regex.Split(stringToSplit, splitPattern)
                                    .Where(item => !string.IsNullOrWhiteSpace(item))
                                    .ToArray();
        
        // 输出结果
        foreach (var item in splitResult)
        {
            Console.WriteLine(item);
        }
    }
}

代码说明

  1. 正则模式@"(?=\(\d+\))":
    • (?=...):正向预查断言,仅匹配一个位置,不消耗任何字符
    • \(\d+\):匹配( + 一个或多个数字 + )的格式,也就是你需要保留的分隔符前缀
  2. 过滤空项:因为原字符串以(10)开头,分割后第一个元素是空字符串,所以用Where过滤掉空白项
  3. 扩展性:如果你的分隔符前缀是(任意内容),可以把正则改成@"(?=\([^)]+\))",这样能匹配括号内任意非)的内容

运行上述代码后,输出结果与你期望的完全一致:

(10)12345
(20)dk34jf
(3)li33

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:40:03