【发布时间】:2012-05-18 00:09:42
【问题描述】:
所以这里有很多帖子说明我应该使用 Vb.Net TextFiledParser,而不是滚动我自己的 csv 解析器。
我试过了,如果我错了,请告诉我,它会根据单个分隔符进行解析。
所以如果我有一个地址字段“Flat 1, StackOverflow House, London”,我会得到三个字段。不幸的是,这不是我想要的。我需要给定单元格中的所有内容都保留为数组中的单个项目。
所以我开始编写自己的正则表达式如下:
var testString = @"""Test 1st string""" + "," + @"""Flat 1, StackOverflow House, London, England, The Earth""" + "," + "123456";
var matches = Regex.Matches(chars, @"""([^""\\])*?(?:\\.[^""\\]*)*?""");
var numbers = Regex.Matches(chars, @"\d+$");//only numbers
Assert.That(results.Count(), Is.EqualTo(3));
Assert.That(secondMatch.Count, Is.EqualTo(1));
第一个断言失败,因为没有返回字符串“123456”。该表达式仅返回“Test 1st string”和“Flat 1, StackOverflow House, London, England, The Earth”
我希望正则表达式返回所有引用\转义的内容和数字。
我不控制数据,但数字字符串都会被引用\转义,而数字不会。
我非常感谢一些帮助,因为我正在兜圈子尝试第三方库,但没有取得多大成功。
不用说 string.split 在地址的情况下不起作用,http://www.filehelpers.com/ 似乎没有考虑这些例子。
【问题讨论】:
-
使用正则表达式解析 CSV 确实很麻烦,尤其是如果您不控制输入。因此,除非您可以保证字符串中不会有任何转义引号,否则您将很难让正则表达式可靠地完成这项工作。