2

我想根据逗号分割一个字符串,不包括双引号中的一个,如果有任何相邻的逗号,它们也应该算作单独的标记

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

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

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

输出应该是

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

eleven

请帮忙

4

1 回答 1

6

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

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

"仅当所讨论的逗号和字符串末尾之间存在偶数个时才会匹配。

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

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

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

这将阻止引擎回溯。

于 2012-11-07T10:38:13.910 回答