【发布时间】:2013-12-26 11:24:18
【问题描述】:
我需要拆分一个包含订单的 CSV 文件(我以字符串的形式读入)。这个 CSV 的解析规则并不复杂:
每个订单有几行(无固定编号)
每个订单以一行开头(发起者):
111;222;dynamic content
每个订单以两行结尾(终止符):
111;333;dynamic content
111;333;dynamic content
发起者和终结者必须包含在拆分的结果中。
[编辑] 我不需要使用正则表达式。这只是我的第一个想法。我也可以使用另一种解决方案,如果它更容易的话。 [/编辑]
我对正则表达式没有太多经验,所以即使开始也需要很长时间:-( 例如,我尝试了以下方法:
String[] parts = body.split("111;333;.*111;333;");
预期结果:拆分器为 111;333;至 111;333; - 请记住,每个订单都以两行结尾,均以 111;333 开头;因此,String[] 应该包含正确数量的 IMO 订单。但是,数组中只有一个字符串包含所有内容。
我玩过一些其他的正则表达式,但我不能得到一个好的结果。有人可以帮我告诉我这个拆分的正则表达式吗?谢谢...
最好的问候, 启
【问题讨论】:
-
您是否必须为此使用正则表达式?为什么不是一个简单的直接 String.split() 按行然后按字段分隔符?以Here 为例。
-
不确定你想用正则表达式来做到这一点。它会很毛茸茸,很难维护。改为使用标记器解析行。
-
我不必使用正则表达式!这只是我的第一个想法。当然,我们将不胜感激更简单的解决方案!
-
CSV 是 Comma-Separated Values(或 Character-Separated Values)的首字母缩写词,这意味着文件的每一列都由“;”分隔或其他角色。您可以使用该字符简单地拆分行的字符串并获取数据。
-
@KaiWähner 链接我在第一条评论中发布了一个使用 String.split() 的示例