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

mznpcxlj  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(126)

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

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

字符串
每一行都没有空格,只有在行尾--但是不应该在双引号内有空格的地方截断行。
例如:test1,test 2,test 3,test 4,test 5,“test 6”,test 7(新行)test 8,test 9等。
有没有人能给我指引正确的方向?谢谢。

nkcskrwz

nkcskrwz1#

我建议参考an existing solution,而不是重新发明自己的(除非你是为了学习经验!)解析CSV比看起来更棘手。

**编辑:**没有看到你使用C#. Herearemorelinks.

xa9qqrwz

xa9qqrwz2#

使用现有的CSV解析器,而不是尝试使用Regex-正如您所看到的,格式是微妙的。
FileHelpers是一个流行的库,在Microsoft.VisualBasic.FileIO命名空间中有TextFieldParser

niknxzdl

niknxzdl3#

这是一个老问题,但这里有一个正则表达式,为我工作。

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."

相关问题