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)
请帮忙
如果您的所有引号都匹配,则您要分割的每个逗号后面都会跟有偶数".所以你可以使用前瞻,把这个东西塞进myString.split(pattern, -1):
,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)
Run Code Online (Sandbox Code Playgroud)
只有在有"问题的逗号和字符串结尾之间存在偶数时才会匹配.
请注意,-1参数for split很重要,否则将省略尾随空字符串.
旁注:我不知道Java正则表达式引擎是如何优化的,所以如果它失败,这个前瞻可能效率很低,因为它不必要地回溯.如果您遇到性能问题,请尝试使量词占有:
,(?=(?:(?:[^\"]*+\"){2})*+[^\"]*+$)
Run Code Online (Sandbox Code Playgroud)
这将阻止发动机回溯.
| 归档时间: |
|
| 查看次数: |
4090 次 |
| 最近记录: |