【发布时间】:2016-07-11 19:27:02
【问题描述】:
我正在读取以逗号(,)作为字段分隔符和双引号(“)作为文本限定符的 csv 文件。以下是获取行列的代码:
row.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")
这工作正常。 但我想动态指定我的字段分隔符和文本限定符,即它们将作为输入与 csv 文件一起传递。并且文件将根据输入文件分隔符和文本限定符进行解析。如何修改上面的正则表达式以即时获取字段分隔符和文本限定符。
编辑: 我正在使用 Apache Commons CSV 来解析 csv 文件。但在我的情况下,标题行可以是文件中的任何行。并且没有办法将标题行索引传递给 Commons CSV 解析器。所以我将手动读取文件并获取标题行。将其列拆分为字符串数组并将其传递给解析器。加上字段分隔符和文本限定符是用户定义的,因此需要在此基础上进行拆分。
【问题讨论】:
-
为什么不使用 opencsv.sourceforge.net(或任何其他 CSV 库)?如果您真的想使用正则表达式,请参阅
Pattern.quote和其余的字符串连接(例如:row.split(Pattern.quote(";") + "(?=(....))");) -
考虑使用Commons CSV,您可以在其中定义自定义字段和行分隔符以及引号的用法。事实上,它非常易于使用
-
@SashaSalauyou 我正在使用 Commons CSV 来解析 csv 文件。我需要它来解析文件的标题行(可以是任何行)并将其传递给 Commons CSV,因为无法将标题行索引传递给 Commons CSV 解析器。