我有一个很大的字符串,它从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等。有没有人能给我指引正确的方向?谢谢。
nkcskrwz1#
我建议参考an existing solution,而不是重新发明自己的(除非你是为了学习经验!)解析CSV比看起来更棘手。
**编辑:**没有看到你使用C#. Herearemorelinks.
xa9qqrwz2#
使用现有的CSV解析器,而不是尝试使用Regex-正如您所看到的,格式是微妙的。FileHelpers是一个流行的库,在Microsoft.VisualBasic.FileIO命名空间中有TextFieldParser。
Regex
Microsoft.VisualBasic.FileIO
TextFieldParser
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."
型
3条答案
按热度按时间nkcskrwz1#
我建议参考an existing solution,而不是重新发明自己的(除非你是为了学习经验!)解析CSV比看起来更棘手。
**编辑:**没有看到你使用C#. Herearemorelinks.
xa9qqrwz2#
使用现有的CSV解析器,而不是尝试使用
Regex
-正如您所看到的,格式是微妙的。FileHelpers是一个流行的库,在
Microsoft.VisualBasic.FileIO
命名空间中有TextFieldParser
。niknxzdl3#
这是一个老问题,但这里有一个正则表达式,为我工作。
字符串
产出:
型