我需要解析一个TSV格式的文件(选项卡分隔值)。我使用regex将文件分解为每一行,但无法找到令人满意的正则表达式来解析每一行。现在我想出了这个问题:
(?<g>("[^"]+")+|[^\t]+)但是,如果一行中的项有超过两个连续的双引号,则不起作用。
文件的格式化方式如下:每个元素都由一个制表分隔。如果一个项目包含一个选项卡,它会被双引号包围。如果一个项目包含双引号,它将加倍。但有时一个元素包含4个相关的双引号,上面的正则表达式将元素拆分成两个不同的元素。
示例:
item1ok“项目”“2”“oK”
正确地将其解析为两个元素:item1ok和项“2”ok(在对不必要的引号进行修整后),但是:
item1oK“项目”2oK“
将其解析为三个元素:item1ok、item和"2ok (重新修剪后)。
有谁想过如何让这个案子适合这个案子吗?还是有另一种简单解析TSV的解决方案?(我在C#上做这个)。
发布于 2010-03-09 16:55:48
你可以用TextFieldParser。这在技术上是一个VB程序集,但是即使在C#中也可以通过引用Microsoft.VisualBasic.FileIO程序集来使用它。
上面链接处的示例甚至显示了在选项卡分隔的文件上使用它。
发布于 2010-03-09 16:51:37
与其尝试构建您自己的CSV/TSV文件解析器(或使用String.Split),我建议您查看一下"快速CSV阅读器“或"FileHelpers库”。
我使用的是第一个,并且对它非常满意(它支持任何分隔字符,例如逗号、分号、制表符)。
发布于 2010-03-09 16:51:02
不使用RegEx,也许可以尝试[String.Split方法(Char[]) ](http://msdn.microsoft.com/en-us/library/aa904305(VS.71%29.aspx)方法。
https://stackoverflow.com/questions/2410788
复制相似问题