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.)
最终输出效果
- Snowflake cake flour 12.5kg R142.99
- Libresse Toilet Rolls 24s R82.99
- Snowflake Self Raising Flour 10 x 1kg R264.99 20 x 500g R264.99
- Elite Rice 10kg R85.99
- Allsome Rice 10kg R133.99 5kg 88.99
- Nola Mayonnaise 6 x 750g
- Aromat
内容的提问来源于stack exchange,提问作者Chamkey
相关产品推荐
相关产品推荐

