C# 使用Regex按分隔符拆分行忽略引号内分隔符及未闭合引号处理问题
正则调整方案
原正则的核心问题是强依赖双引号成对匹配的逻辑,遇到未闭合的单个双引号时,断言匹配失败,导致返回空字段。调整后的正则如下:(?<=^|,)(?:"[^"]*(?:"|$)|[^,])*?(?=,|$)
正则逻辑说明
- 从分隔符/行首位置开始匹配
- 优先匹配被双引号包裹的内容:如果找到闭合双引号就匹配到闭合引号为止,如果没有找到闭合双引号,就匹配到下一个分隔符/行尾为止
- 没有引号的场景直接匹配到下一个分隔符/行尾
- 全程不会强制要求双引号必须成对,兼容未闭合引号的异常输入
测试效果验证
常规无引号输入
输入内容:column1, column2, column3
拆分结果:
column1 column2 column3
引号内含分隔符输入
输入内容:column1, "column2," column3
拆分结果:
column1 "column2," column3
未闭合引号输入
输入内容:column1, column2", column3
拆分结果:
column1 column2" column3
C# 调用代码示例
using System; using System.Text.RegularExpressions; class Program { static void Main() { string input = "column1, column2\", column3"; Regex splitRegex = new Regex(@"(?<=^|,)(?:""[^""]*(?:""|$)|[^,])*?(?=,|$)"); var matches = splitRegex.Matches(input); foreach (Match match in matches) { // 过滤空值可根据业务需求决定是否保留 if (!string.IsNullOrWhiteSpace(match.Value)) { Console.WriteLine(match.Value); } } } }
内容的提问来源于stack exchange,提问作者wizard
相关产品推荐
相关产品推荐

