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

ban*_*ara 2 java regex string-split

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

我可以在逗号上进行字符串拆分,不包括使用正则表达式使用双引号的字符串 [^,\"']+|\"([^\"]*)\"

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

one,two,three,four,"five1,five2", six ,seven,"eight1,eight2","nine",,eleven
Run Code Online (Sandbox Code Playgroud)

输出应该是

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

eleven
Run Code Online (Sandbox Code Playgroud)

请帮忙

Mar*_*der 6

如果您的所有引号都匹配,则您要分割的每个逗号后面都会跟有偶数".所以你可以使用前瞻,把这个东西塞进myString.split(pattern, -1):

,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)
Run Code Online (Sandbox Code Playgroud)

只有在有"问题的逗号和字符串结尾之间存在偶数时才会匹配.

请注意,-1参数for split很重要,否则将省略尾随空字符串.

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

,(?=(?:(?:[^\"]*+\"){2})*+[^\"]*+$)
Run Code Online (Sandbox Code Playgroud)

这将阻止发动机回溯.