Java Regex-分割逗号分隔的列表,但排除括号内的逗号 [英] Java Regex - split comma separated list, but exclude commas within parentheses

查看:215
本文介绍了Java Regex-分割逗号分隔的列表,但排除括号内的逗号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to write regex that will split a Java string like this:

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

/ p>

in to something like this:

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

我一直在尝试 \,( )()?,但是最后还要在括号中选择逗号。

I've been trying \,(\()? but this ends up selecting the commas in the parentheses as well.

任何帮助表示感谢!

推荐答案

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

If you have to use regex you can split on ,(?![^(]*\\))

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

If not then one simple iteration over characters can do the trick

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);

输出

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

这篇关于Java Regex-分割逗号分隔的列表,但排除括号内的逗号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆