解析TSV文件

Ant*_*ine 4 c# regex parsing

我需要解析TSV格式的文件(制表符分隔值).我使用正则表达式将文件分解为每一行,但我找不到令人满意的解析每一行.现在我来了:

(?<g>("[^"]+")+|[^\t]+)
Run Code Online (Sandbox Code Playgroud)

但如果该行中的项目具有超过2个连续的双引号,则它不起作用.

以下是文件的格式:每个元素由制表分隔.如果某个项目包含一个标签,则它会被双引号括起来.如果项目包含双引号,则会加倍.但有时一个元素包含4个连续双引号,上面的正则表达式将元素分成2个不同的元素.

例子:

item1ok"item""2""oK"

正确解析为2个元素:item1ok项目"2"ok(修剪不必要的引号后),但是:

item1oK"item""""2oK"

被解析为3个元素:item1ok,item"2ok(再次修剪后)".

有谁知道如何让正则表达式适合这种情况?或者是否有另一种解决TSV的解决方案?(我在C#中这样做).

Ada*_*eal 7

您可以使用TextFieldParser.这在技术上是一个VB程序集,但您可以通过引用Microsoft.VisualBasic.FileIO程序集在C#中使用它.

上面链接中的示例甚至显示在制表符分隔文件上使用它.

  • +1它是.Net框架的一部分:它得到了Microsoft的支持,它不需要单独部署. (2认同)
  • 只是要注意,这在 Dotnet Core 和 Dotnet Standard 中不可用,因为 VisualBasic 代码不是开源的,也没有被移植过。 (2认同)

M4N*_*M4N 6

我建议您查看" Fast CSV Reader "或" FileHelpers library ",而不是尝试构建自己的CSV/TSV文件解析器(或使用String.Split).

我正在使用第一个,并且非常满意它(它支持任何分隔符,例如逗号,分号,制表符).