【问题标题】:Optimize Comma Separated Values Regular Expression优化逗号分隔值正则表达式
【发布时间】:2013-12-28 05:49:52
【问题描述】:

我正在创建一个逗号分隔值的字符串数组。 我需要用逗号分隔行,但不是引号内的逗号,因为这可能是数据的一部分。

例如:
\"421 15th Ave.\",\"Beaver Falls, PA\",\"S1\",

我不希望它在城市和州之间为一个新领域而分裂。

这是目前的代码:

string[] fields = Regex.Split(lines[i], @",(?=(?:[^""]*""[^""]*"")*(?![^""]*""))");

执行需要很长时间。 我可以使用更好的选择吗?

感谢您对此的任何帮助。

【问题讨论】:

  • 您需要使用正则表达式吗? CSV 通常最好使用简单的旧 string 方法来处理。
  • 我不需要使用当前使用的正则表达式。寻找更好的选择。您建议使用哪种字符串方法来解决此问题?
  • 使用某种csv 阅读器。假设你使用的是一个不错的,这已经被处理并且代码应该被优化。
  • 如果您使用 Parallel.ForEach 和 Parititioner.Create 在处理器之间并行分割文件行,您可能会获得更高的性能。这样,您可以在处理器 1 上处理 LINES0-1000,在处理器 2 上处理 LINES1001-2000,从而获得 2 倍的改进。

标签: c# regex csv quotes


【解决方案1】:

您是否考虑过使用 CSV 阅读器? 这个 CSV-Reader 应该已经处理了双引号内逗号的情况: OpenCsv

请参阅 Ravi Thapliyal 在此线程中关于如何使用它的回答:link

对于 C#,我可以推荐这个 CsvHelper:https://github.com/JoshClose/CsvHelper

我们在项目中使用它,非常好用

【讨论】:

  • 有与此等价的 C# 吗?
  • Hey Baxter 我在您发表评论之前更新了我的答案 :-) 请参阅上面我的答案中的 CsvHelper 链接
  • 嘿巴克斯特,如果这个答案有帮助,我将不胜感激,如果你能将其标记为已接受的答案:-) 谢谢
猜你喜欢
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多