java - java中的正则表达式删除csv中的第一个值

标签 java regex

我有一个如下所示的 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/

相关文章:

c# - Encog 中的多类 SVM 分类

java - Tomcat 8.5 org.apache.juli maxDays 属性不工作

python - 如何获取所有不包含数字的特定长度的单词?

java - java中使用正则表达式进行模式匹配和范围检查

Ruby 捕获两个冒号之间的单词

regex - 将 URIPATH 与可选 URIPARAM 相匹配的 Grok 模式

php - 将字符串部分与数组值进行比较

java - 从 ArrayList 获取列

java - 打印从文本文件创建的数组

java - Android XML 解析错误 - "Couldn' t 打开 .../directory/container.xml"