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

C#按多字符分隔符拆分文本并保留分隔符的实现难题

商品列表拆分与格式化解决方案

问题场景

待处理的不规范商品文本:

Line A
1. Snowflake cake flour 12.5kg R142.99
2. Libresse Toilet Rolls 24s R82.99 3. Snowflake Self Raising Flour 10 x 1kg R264.99 20 x 500g R264.99
4. Elite Rice 10kg R85.99 5. Allsome Rice 10kg R133.99 5kg 88.99
6. Nola Mayonnaise 6 x 750g
7. Aromat
8.

核心需求:将合并在同一行的多商品拆分,每个商品单独成列表项,保留原有的数字. 空格编号格式。

解决方案

问题出在Regex.Split默认会丢弃分隔符,通过捕获组可以保留分隔符,再将分隔符与对应商品内容拼接即可。以下是完整C#实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

public class ProductParser
{
    public static List<string> ParseProducts(string rawText)
    {
        // 按行拆分,过滤空行和仅含编号的无效行
        var validLines = rawText.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
                                .Where(line => !string.IsNullOrWhiteSpace(line) && !Regex.IsMatch(line, @"^\d+\.$"));

        var products = new List<string>();
        // 正则捕获组保留"数字. "格式的分隔符
        var splitRegex = new Regex(@"(\d+\. )");

        foreach (var line in validLines)
        {
            // 拆分后数组结构:[空串, 分隔符1, 商品内容1, 分隔符2, 商品内容2,...]
            var parts = splitRegex.Split(line);
            // 从索引1开始,每两个元素拼接成一个完整商品项
            for (int i = 1; i < parts.Length; i += 2)
            {
                if (i + 1 < parts.Length)
                {
                    var fullProduct = parts[i] + parts[i + 1].Trim();
                    products.Add(fullProduct);
                }
            }
        }

        return products;
    }

    public static void Main()
    {
        string rawInput = @"Line A
1. Snowflake cake flour 12.5kg R142.99
2. Libresse Toilet Rolls 24s R82.99 3. Snowflake Self Raising Flour 10 x 1kg R264.99 20 x 500g R264.99
4. Elite Rice 10kg R85.99 5. Allsome Rice 10kg R133.99 5kg 88.99
6. Nola Mayonnaise 6 x 750g
7. Aromat
8.";

        var formattedProducts = ParseProducts(rawInput);
        // 输出规范列表项
        foreach (var product in formattedProducts)
        {
            Console.WriteLine($"- {product}");
        }
    }
}

关键说明

  • 正则捕获组:(\d+\. )中的括号会将匹配到的编号分隔符(如2. )保留在拆分结果中
  • 数组遍历逻辑:拆分后的数组按「空串→分隔符→商品内容」循环,步长为2遍历即可将分隔符与对应商品拼接
  • 无效行过滤:提前移除空行和仅含数字.的无效行(如原文本中的8.)

最终输出效果

    1. Snowflake cake flour 12.5kg R142.99
    1. Libresse Toilet Rolls 24s R82.99
    1. Snowflake Self Raising Flour 10 x 1kg R264.99 20 x 500g R264.99
    1. Elite Rice 10kg R85.99
    1. Allsome Rice 10kg R133.99 5kg 88.99
    1. Nola Mayonnaise 6 x 750g
    1. Aromat

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:25:31