我想基于逗号分割一个字符串,不包括双引号中的字符串,如果有任何相邻的逗号,则应将它们计为单独的标记
我能够使用正则表达式[^,\"']+|\"([^\"]*)\"
但如果有相邻的逗号,则无法正确标记。 例 用于字符串
one,two,three,four,"five1,five2", six ,seven,"eight1,eight2","nine",,eleven
输出应该是
one
two
three
four
five1,five2
six
seven
eight1,eight2
nine
eleven
请帮助
答案 0 :(得分:6)
如果您的所有引号都匹配,则您要分割的每个逗号后面都会跟有偶数"
。因此,您可以使用前瞻并将此内容填入myString.split(pattern, -1)
:
,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)
只有在相关逗号和字符串结尾之间存在偶数个"
时才会匹配。
请注意-1
的{{1}}参数很重要,否则将省略尾随空字符串。
旁注:我不知道Java正则表达式引擎的优化程度如何,因此如果它失败,这种前瞻可能效率很低,因为它不必要地回溯。如果您遇到性能问题,请尝试使量词具有占有性:
split
这将阻止引擎回溯。