Java Regex - 拆分逗号分隔列表,但在括号内排除逗号

akb*_*urg 3 java regex brackets comma

我正在尝试编写将这样拆分Java字符串的正则表达式:

300x250,468x60,300x400v(480x320,768x1024,100x100),400x300v,640x480v(200x200,728x90)
Run Code Online (Sandbox Code Playgroud)

在这样的事情:

300x250 
468x60
300x400v(480x320,768x1024,100x100)
400x300v
640x480v(200x200,728x90)
Run Code Online (Sandbox Code Playgroud)

我一直在尝试,\,(\()?但最终也在括号中选择了逗号.

任何帮助赞赏!

Psh*_*emo 5

如果你必须使用正则表达式,你可以拆分 ,(?![^(]*\\))

如果没有,那么对字符的一个简单迭代就可以解决问题

String data="300x250,468x60,300x400v(480x320,768x1024,100x100),400x300v,640x480v(200x200,728x90)";

List<String> tokens=new ArrayList<>();
StringBuilder buffer=new StringBuilder();

int parenthesesCounter=0;

for (char c : data.toCharArray()){
    if (c=='(') parenthesesCounter++;
    if (c==')') parenthesesCounter--;
    if (c==',' && parenthesesCounter==0){
        //lets add token inside buffer to our tokens
        tokens.add(buffer.toString());
        //now we need to clear buffer  
        buffer.delete(0, buffer.length());
    }
    else 
        buffer.append(c);
}
//lets not forget about part after last comma
tokens.add(buffer.toString());

String[] splitedArray=tokens.toArray(new String[tokens.size()]);

//lets test what is inside our array
for (String s : splitedArray)
    System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

产量

300x250
468x60
300x400v(480x320,768x1024,100x100)
400x300v
640x480v(200x200,728x90)
Run Code Online (Sandbox Code Playgroud)