逗号上的字符串拆分在双引号中排除逗号并拆分相邻的逗号

时间:2012-11-07 10:32:36

标签: java regex string-split

我想基于逗号分割一个字符串,不包括双引号中的字符串,如果有任何相邻的逗号,则应将它们计为单独的标记

我能够使用正则表达式[^,\"']+|\"([^\"]*)\"

对逗号进行字符串拆分,不包括双引号

但如果有相邻的逗号,则无法正确标记。 例 用于字符串

one,two,three,four,"five1,five2", six ,seven,"eight1,eight2","nine",,eleven

输出应该是

one
two
three
four
five1,five2
six
seven
eight1,eight2
nine

eleven

请帮助

1 个答案:

答案 0 :(得分:6)

如果您的所有引号都匹配,则您要分割的每个逗号后面都会跟有偶数"。因此,您可以使用前瞻并将此内容填入myString.split(pattern, -1)

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

只有在相关逗号和字符串结尾之间存在偶数个"时才会匹配。

请注意-1的{​​{1}}参数很重要,否则将省略尾随空字符串。

旁注:我不知道Java正则表达式引擎的优化程度如何,因此如果它失败,这种前瞻可能效率很低,因为它不必要地回溯。如果您遇到性能问题,请尝试使量词具有占有性:

split

这将阻止引擎回溯。