优化逗号分隔值正则表达式

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 链接 嘿巴克斯特,如果这个答案有帮助,我将不胜感激,如果你能将其标记为已接受的答案:-) 谢谢

以上是关于优化逗号分隔值正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式捕获逗号分隔值

正则表达式匹配两个或多个逗号分隔的整数

在逗号分隔的字母数字正则表达式中添加空格

正则表达式逗号分隔分隔符

正则表达式将数字转换为逗号分隔的数字,可选两位小数

正则表达式逗号分隔的电子邮件