【问题标题】:Regular Expression for Comma Based Splitting Ignoring Commas inside Quotes忽略引号内逗号的基于逗号的拆分的正则表达式
【发布时间】:2013-07-30 03:27:54
【问题描述】:

在我的一个项目中,我不得不处理逗号分隔文件 (CSV)。我不得不根据逗号, 拆分数据,忽略引号内的逗号(即""),所以我使用了另一个堆栈溢出问题(Java: splitting a comma-separated string but ignoring commas in quotes)中提到的表达式。一切正常,直到最近我注意到它不适用于下面提到的一种特定情况。

我有一个数据字符串需要在逗号上拆分为:

20Y-62-27412,20Y6227412NK,BRACKET,101H,00D505060,H664374,06/25/2013,1,,

在我的理解基础上表达

String[] rowData = str.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

拆分后的数据应该返回一个大小为 10 的数组,其中数组的最后两个索引包含一个空字符串,相反,我得到一个大小为 8 的数组,最后两个逗号不被视为拆分器。我已经在我的应用程序的几个地方使用了这个表达式,所以我不想回溯。任何帮助,将不胜感激。谢谢

【问题讨论】:

  • 使用CSV parser?
  • 这个问题类似于解析包含括号的数学术语。大多数人会告诉您,RegEx 不是的方式。我什至不确定 CSV 是不是一种常规语言(我的大学时代早已一去不复返了,所以我不确定……XD)
  • 我的文件中有日文字符,其中的字符架构非常复杂,我认为使用任何解析器都无法轻松完成。此外,RE 可以很好地拆分数据,因此我只是发现了这个问题。使用解析器将花费我在几十个地方对我的应用程序进行更改,考虑到时间跨度很短,这不是一个选择。

标签: java regex string


【解决方案1】:

您需要使用split(java.lang.String, int) 方法

您的代码将如下所示:

String str = "20Y-62-27412,20Y6227412NK,BRACKET,101H,00D505060,H664374,06/25/2013,1,,";
String[] rowData = str.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1);

【讨论】:

  • 非常感谢...兄弟。像魅力一样工作:-)
  • 完美,它保留了引号并在 C# 中完成了它的工作,所以谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-07-01
  • 2017-11-25
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多