我正在使用正则表达式来读取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类拆分的方法。
答案 0 :(得分:0)
请记住,您应该使用解析器,但是如果必须使用正则表达式,那么应该使用正则表达式:
;(?=[^"]*(?:(?:"[^"]*){2})*$)
;
与分号匹配。
(?=...)
是一个积极的前瞻。它检查包含在其中的模式是否匹配,而不实际匹配。
[^"]*(?:(?:"[^"]*){2})*$
确保字符串的其余部分有偶数引号。