[英]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})*[^\"]*$)
仅当所讨论的逗号与字符串的末尾之间有偶数个"
,这才匹配。
请注意, -1
的split
参数很重要,否则尾随的空字符串将被忽略。
旁注:我不知道Java regex引擎的优化程度如何,因此,如果失败,这种前瞻可能效率很低,因为它不必要地回溯。 如果遇到性能问题,请尝试使量词具有所有格:
,(?=(?:(?:[^\"]*+\"){2})*+[^\"]*+$)
这将阻止引擎回溯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.