按空格分割字符串,但忽略引号内的空格

问题描述 投票:0回答:3

我有一个大字符串,它从 csv 文件获取数据,但是当使用正则表达式时,例如:

Regex regex = new Regex(@"\w+|""[\w\s]*""");

它会分割每个字母吗?每行没有空格,仅在行尾 - 但不应在双引号内有空格的地方剪切该行。

示例:测试1,测试2,测试3,测试4,测试5,“测试6”,测试7(新 线)测试8,测试9等

有人可以引导我走向正确的方向吗?谢谢

c# regex csv split
3个回答
4
投票

我建议参考现有的解决方案,而不是重新发明自己的解决方案(除非你想要学习经验!)解析 CSV 比看起来更棘手。

编辑: 没有看到您正在使用 C#。 这里更多链接


1
投票

使用现有的 CSV 解析器,而不是尝试使用

Regex
- 正如您所看到的,格式很微妙。

FileHelpers 是一个流行的库,并且

TextFieldParser
位于
Microsoft.VisualBasic.FileIO
命名空间中。


0
投票

这是一个老问题,但这是一个对我有用的正则表达式。

string SplitRegex = @"(?:,)|(['""][^""]*['""])(?:,)*";
    
string input = "\"dear friend, I'm home\", \"Thanks, your other friend.\"";


var results = Regex.Split(input, SplitRegex)
                                .Select(x => x.Trim())
                                .Where(match => !string.IsNullOrEmpty(match))
                                .ToList();
    
foreach(var result in results)
{
    Console.WriteLine(result);
}

输出:

"dear friend, I'm home"
"Thanks, your other friend."
© www.soinside.com 2019 - 2024. All rights reserved.