用引号标识符分隔的管道正则表达式

时间:2012-08-13 07:05:35

标签: c# regex pipe delimiter quoted-identifier

  

可能重复:
  Parsing CSV files in C#

我有一个解析管道分隔文件的C#应用​​程序。它使用Regex.Split方法:

Regex.Split(line, @"(?<!(?<!\\)*\\)\|")

然而,最近一个数据文件遇到了一个数据字段中包含的管道。有问题的数据字段使用引用的标识符,因此当您在Excel中打开时,它会正确打开。

例如,我有一个看起来像这样的文件:

Field1 | Field2 |“字段3在引号内有| | Field4

当我使用上面的正则表达式时,它解析为:

字段1
字段2
领域3有一个  在报价内 Field4

我希望

字段1
字段2
字段3具有|在报价内 Field4

我做了大量的研究,似乎无法让Regex.Split在管道上拆分文件,但尊重引用的标识符。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

这是一个快速的表达式,我把它放在一起,而不是似乎做的伎俩:

"([^"]+)"|([^\|]+)

虽然你的表达似乎也在做一些事情,所以你可能需要在此表达式中添加任何其他需求。我在答案中忽略了它们,因为它们没有在问题中解释,因此我不能在不知道它们为什么存在的情况下提供解决方案 - 事实上它们根本不需要在那里。

另外,我的表达式忽略了空字段(即1 || 2 | 3只会出现1,2和3)我不知道这是否是你需要的,如果它不是让我知道,我可以将表达式改为适合这种情况的东西。

希望这无论如何都有帮助。