优化逗号分隔值正则表达式
Posted
技术标签:
【中文标题】优化逗号分隔值正则表达式【英文标题】: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 倍的改进。
【参考方案1】:
您是否考虑过使用 CSV 阅读器? 这个 CSV-Reader 应该已经处理了双引号内逗号的情况: OpenCsv
请参阅 Ravi Thapliyal 在此线程中关于如何使用它的回答:link
对于 C#,我可以推荐这个 CsvHelper:https://github.com/JoshClose/CsvHelper
我们在项目中使用它,非常好用
【讨论】:
有与此等价的 C# 吗? Hey Baxter 我在您发表评论之前更新了我的答案 :-) 请参阅上面我的答案中的 CsvHelper 链接 嘿巴克斯特,如果这个答案有帮助,我将不胜感激,如果你能将其标记为已接受的答案:-) 谢谢以上是关于优化逗号分隔值正则表达式的主要内容,如果未能解决你的问题,请参考以下文章