如何使用正则表达式忽略双引号内的\ t字符?

时间:2013-02-15 12:27:39

标签: c# regex csv double-quotes tab-delimited

我正在尝试使用正则表达式拆分解析文件,它适用于'\t'字符,但某些行在字段内部有'\t'而不是作为分隔符。

喜欢:

G2226   TEST 1  C   29  Internal Head Office    D   Head Office ZZZ Unassigned  10910   10/10/2011  11/10/2011  10/10/2011  11/10/2011  "Test call  Sort the customer out some data. See the customer again tomorrow to talk about Prod     "   Mr ABC          Mr ABC                  Mr  ABC Mr  ABC Credit Requested    BDM Call    Internal Note   10

这部分有两个我希望被忽略的标签:

"Test call  Sort the customer out some data. See the customer again tomorrow to talk about Prod\t\t"

好消息是,它们包含在双引号中,但我无法弄清楚如何忽略它们,任何想法?

编辑:

我的目标是获得36列,使用Regex.Split(lineString,'\t') '\t'之后某些列可能会更多,因为它们在某些字段中包含'\t'个字符。我想忽略那些。上面的一个出现了38个cols,被我的数据表拒绝,因为标题只有36个cols,我想解决这个问题。

3 个答案:

答案 0 :(得分:0)

正则表达式不是正确的工具。

您基本上有CSV格式,它是“制表符分隔”,而不是“逗号分隔”,但它的工作方式完全相同。因此,找到CSV parser并使用它 - 分离字符通常是可配置的。

答案 1 :(得分:0)

如果您有一个简单的CSV文件,那么正则表达式拆分通常是处理它的最简单方法。

但是,如果您的CSV文件包含更复杂的元素,例如包含分隔符或换行符的引用字段,则此方法将不再有效。正确解析这些类型的文件并不是一件小事,因此您应尽可能使用库。

this question的答案为可以读取CSV文件的C#库提供了几个选项。

答案 2 :(得分:0)

如果你真的需要一个正则表达式,你可以尝试这样的事情:

(?!\t")\t(?!\t")