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

Regex 调整现有正则表达式以忽略引号内的分号,regex,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

我使用正则表达式读取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类中分离出来的。

请记住,您可能应该为此使用解析器,但如果您必须使用正则表达式,这里有一个应该可以使用的方法:

;(?=[^"]*(?:(?:"[^"]*){2})*$)
解释
与分号匹配

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


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

您使用的是什么编程语言?Java。使用从字符串类拆分的方法。也许尝试使用有趣的…我将尝试使用此解析器。但我仍然好奇如何使此正则表达式工作。正则表达式的唯一问题是
“*
,只需要去掉星星,它就行了!谢谢你的回答,我将使用现有的CSV解析器来读取文件。再次感谢,没问题。很高兴你把它整理好了!因为
\“*
位使该引号成为可选的。如果要从中删除
*
,则该引号应该可以使用。