我有一个如下所示的 csv 文件:
12,2014-10-09 06:00:00,2014-10-09 06:15:00,"","","","123,456","","9,999","",""
我能够使用以下方法替换数字和所有双引号之间的逗号:
String test = rowData.replaceAll("([0-9]),([0-9])","$1$2").replaceAll("\"","");
我不确定这是否是执行此操作的最佳方法(欢迎提出意见)。我的问题是我还需要删除逗号前的第一个值,所以基本上我的输出需要是这样的
Orig: 12,2014-10-09 06:00:00,2014-10-09 06:15:00,"","","","123,456","","9,999","",""
Need: 2014-10-09 06:00:00,2014-10-09 06:15:00,,,,123456,,9999,,
我不确定是否需要另一个正则表达式来执行此操作,因为我不知道究竟如何使用 lastindex 或 firstindex 之类的东西来删除逗号的第一个值???谢谢
编辑:我刚刚注意到我不能使用 ([0-9]),([0-9]) 因为它也删除了日期时间的逗号。 :(。正确的问题是如何替换 csv 以删除: 1. 第一个值 2.引述 3. 数字和引号之间的逗号
最佳答案
试试这个:
String test = rowData.replaceAll("^[^,]+|,(?!(([^\"]*\"){2})*[^\"]*$|\"(?=,)|(?<=,)\"", "");
被替换为空白(即移除)的alternations有3种:
- 包括第一个逗号在内的所有内容
- 引号内的所有逗号(后面没有偶数个引号的)
- 所有与逗号相邻(紧接在逗号之后或之前)的引号
关于java - java中的正则表达式删除csv中的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26268847/