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

如何分割字符串并保留分隔符?含Split方法代码示例场景

如何在分割字符串时保留分隔符?

这个问题我做字符串处理时也碰到过,.NET自带的Split方法默认会丢弃分隔符,但我们可以通过几种方式实现保留分隔符的需求,针对你提到的普通场景和开头带+的情况,给你整理两个实用方案:

方案一:使用正则表达式Regex.Split

正则的零宽度断言可以完美解决这个问题,还能自动处理开头的特殊情况。

场景1:将分隔符附加到前一个元素末尾

如果你希望得到类似["A+", "B+", ..., "H"]的结果,可以用正向零宽度后行断言(?<=\+)——它会匹配+字符后面的位置,但不会消耗+本身,分割时就会把+留在前一个元素里:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        // 普通输入
        string normalInput = "A+B+C+D+E+F+G+H";
        string[] normalResult = Regex.Split(normalInput, @"(?<=\+)");
        
        Console.WriteLine("普通输入结果:");
        foreach (var item in normalResult)
        {
            Console.WriteLine(item); // 输出: A+、B+、C+、...、H
        }

        // 开头带+的输入
        string leadingDelimiterInput = "+A+B+C";
        string[] leadingResult = Regex.Split(leadingDelimiterInput, @"(?<=\+)");
        
        Console.WriteLine("\n开头带+的输入结果:");
        foreach (var item in leadingResult)
        {
            Console.WriteLine(item); // 输出: +、A+、B+、C
        }
    }
}

场景2:将分隔符作为单独元素

如果你希望分隔符独立成一个元素(比如["A", "+", "B", "+", "C"]),可以把分隔符用括号包裹成捕获组(\+),Regex.Split会自动把捕获到的分隔符保留在结果数组中:

string input = "A+B+C";
string[] result = Regex.Split(input, @"(\+)");
// 结果:["A", "+", "B", "+", "C"]

方案二:手动遍历实现分割(无需正则)

如果你对正则不太熟悉,或者需要更灵活的自定义逻辑,可以手动遍历字符串实现分割:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        string normalInput = "A+B+C+D+E+F+G+H";
        string[] normalResult = SplitWithDelimiter(normalInput, '+');
        
        Console.WriteLine("普通输入结果:");
        foreach (var item in normalResult)
        {
            Console.WriteLine(item);
        }

        string leadingInput = "+A+B+C";
        string[] leadingResult = SplitWithDelimiter(leadingInput, '+');
        
        Console.WriteLine("\n开头带+的输入结果:");
        foreach (var item in leadingResult)
        {
            Console.WriteLine(item);
        }
    }

    public static string[] SplitWithDelimiter(string input, char delimiter)
    {
        List<string> parts = new List<string>();
        int startIndex = 0;

        for (int i = 0; i < input.Length; i++)
        {
            if (input[i] == delimiter)
            {
                // 截取从startIndex到当前位置(包含分隔符)的片段
                parts.Add(input.Substring(startIndex, i - startIndex + 1));
                startIndex = i + 1;
            }
        }

        // 添加最后一段未被分割的内容
        if (startIndex < input.Length)
        {
            parts.Add(input.Substring(startIndex));
        }

        return parts.ToArray();
    }
}

这个方法会自动处理开头就是分隔符的情况,比如输入"+A+B+C"时,第一个字符就会被识别为分隔符,单独作为第一个元素加入结果数组。

方案对比

  • 正则方案:代码简洁,一行搞定,适合大多数常规场景,但需要理解正则断言的逻辑。
  • 手动遍历方案:逻辑直观,便于根据需求修改(比如只保留特定位置的分隔符),适合复杂的自定义分割需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:49:42