调整现有正则表达式以忽略引号内的分号

时间:2017-06-22 20:19:42

标签: regex

我正在使用正则表达式来读取csv文件并拆分其列。文件的输入经常变化,并且无法预测内容的来源(不是格式)。我已经使用以下正则表达式来读取csv文件并拆分列:

;(?=(?:[^\"]*\"*[^\"]*\")*[^\"]*$)

直到我面对这样的输入才开始工作:

'02'.'018'.'7975';PRODUCT 1;UN;02
'02'.'018'.'7976';PRODUCT 2;UN;02
'02'.'018'.'7977';PRODUCT 3;UN;02
'02'.'018'.'7978';"PRODUCT 4 ; ADDITIONAL INFO";UN;02 // Problem
'02'.'018'.'7979';"PRODUCT 5 ; ADDITIONAL INFO";UN;02 // Problem

我想了解如何调整我的正则表达式并使其适应忽略引号内的分号。

我使用Java从String类拆分的方法。

1 个答案:

答案 0 :(得分:0)

请记住,您应该使用解析器,但是如果必须使用正则表达式,那么应该使用正则表达式:

;(?=[^"]*(?:(?:"[^"]*){2})*$)

解释

;与分号匹配。

(?=...)是一个积极的前瞻。它检查包含在其中的模式是否匹配,而不实际匹配。

[^"]*(?:(?:"[^"]*){2})*$确保字符串的其余部分有偶数引号。