拆分由逗号分隔的字符串,不考虑括号中的逗号

pri*_*ain 3 java regex string split

我有一个像

s="abc, 3rncd (23uh, sdfuh), 32h(q23q)89 (as), dwe8h, edt (1,wer,345,rtz,tr t), nope";
Run Code Online (Sandbox Code Playgroud)

我想把它分成那些字符串

String[] parts={"abc", "3rncd (23uh, sdfuh)", "32h(q23q)89 (as)", "dwe8h", "edt (1,wer,345,rtz,tr t)", "nope"};
Run Code Online (Sandbox Code Playgroud)

如果我只是s.split(",")在修剪后调用然后我会得到不同的结果,因为在其中一些字符串中,例如"3rncd (23uh, sdfuh)"仍然有一个逗号。但我不想在括号中使用逗号。有没有优雅的方法来解决这个问题?

anu*_*ava 5

假设()不是嵌套和未转义的。您可以使用 split 使用:

String[] arr = input.split(",(?![^()]*\\))\\s*");
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

,(?![^()]*\))如果后面没有非括号文本 and ),则匹配逗号,从而忽略(and 中的逗号)