繁体   English   中英

逗号分隔的字符串排除双引号中的逗号并分隔相邻的逗号

[英]String split on comma exclude comma in double quote and split adjacent commas

我想根据逗号分割字符串,但不包括双引号,如果有相邻逗号,也应将其计为单独的标记

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

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

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

输出应该是

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

eleven

请帮忙

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

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

仅当所讨论的逗号与字符串的末尾之间有偶数个" ,这才匹配。

请注意, -1split参数很重要,否则尾随的空字符串将被忽略。

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

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

这将阻止引擎回溯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM