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

C#正则表达式按逗号或空格分割,忽略单双引号内内容的问题

解决C# Regex.Split分割文本时忽略引号内分隔符的问题

需求说明

  • 目标:使用C#的Regex.Split方法按逗号或空格分割文本,但忽略单双引号(含中文引号“”、‘’)内的逗号和空格
  • 输入文本:Hello world “Boston Red Sox”, ‘Pepperoni Pizza’, ‘Cheese Pizza’, beer
  • 期望输出:
Hello
World
Boston Red Sox
Pepperoni Pizza
Cheese Pizza
Beer

现有代码问题

当前代码的正则表达式存在多处缺陷:

  1. 仅适配英文双引号",未处理输入中的中文引号“”、‘’
  2. 分割逻辑仅针对逗号,未正确识别空格作为分隔符的场景
  3. 正则分组逻辑错误,无法拆分引号外的空格(如Hello world未被拆分为两个独立项)
  4. 输出保留了引号,不符合期望格式

修正后的代码

class Program
{
    static void Main(string[] args)
    {
        string censoredfile = System.IO.File.ReadAllText(@"censored.txt");
        var outputFile = "output.txt";
        
        // 正则:匹配引号外的逗号/空格位置,同时跳过各类引号包裹的内容
        string splitPattern = @"(?<!(“[^”]+|‘[^’]+|""[^""]+""|'[^']+'))(?=[, ])|(?<=[, ])(?!(“[^”]+|‘[^’]+|""[^""]+""|'[^']+'))";
        var results = Regex.Split(censoredfile, splitPattern)
                            .Where(item => !string.IsNullOrWhiteSpace(item))
                            .Select(item => 
                                // 去除首尾引号并修剪空白
                                Regex.Replace(item.Trim(), @"^[“”‘’""']|[“”‘’""']$", "").Trim())
                            .Select(item => char.ToUpper(item[0]) + item.Substring(1));

        // 输出到控制台并写入文件
        foreach (var result in results)
        {
            Console.WriteLine(result);
            System.IO.File.AppendAllText(outputFile, result + Environment.NewLine);
        }
    }
}

关键逻辑说明

  1. 正则分割规则:通过零宽断言确保仅在引号外的逗号或空格位置分割,同时匹配中文/英文单双引号的包裹内容,避免拆分内部文本
  2. 结果清洗:
    • 过滤分割产生的空字符串和空白项
    • 移除每个项首尾的各类引号
    • 将每个项首字母大写,匹配期望输出格式
  3. 文件操作:补充了结果写入输出文件的逻辑,确保持久化保存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:01:09