4
String line = "a=1,b=\"1,2\",c=\"[d=1,e=1,11]\"";
String[] tokens = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)|,(?=\"[\\([^]]*\\)|[^\"]]*\")");
for (String t : tokens) {
System.out.println("> " + t);
}
System.out.println("-----------------------");

安慰

> a=1
> b="1,2"
> c=[d=1
> e="1,1"]
-----------------------

我想要结果

安慰

> a=1
> b="1,2"
> c=[d=1,e="1,1"]
-----------------------

java正则表达式模式拆分逗号(,)的帮助

谢谢

4

4 回答 4

2

您可以使用以下代码:

String line = "a=1,b=\"1,2\",c=\"[d=1,e=1,11]\"";
String[] tokens = line.split(",(?=(([^\"]*\"){2})*[^\"]*$)");
for (String t : tokens)
    System.out.println("> " + t);

此正则表达式仅在逗号后跟偶数个双引号时才匹配。因此,双引号内的逗号不匹配,但是所有外部逗号都用于拆分您的输入。

PS:这仅适用于平衡引用的字符串。例如,这不起作用:"a=1,b=\"1,2"因为双引号是不平衡的。

输出:

> a=1
> b="1,2"
> c="[d=1,e=1,11]"
于 2013-07-31T08:11:40.500 回答
0

试试这个,(?=\\w=(\".+\"))

于 2013-07-31T08:02:34.137 回答
0

我在netbeans中尝试了你的示例代码,我把它输出了。

> a=1
> b="1,2"
> c="[d=1,e=1,11]"  

这不是你想要的吗?

于 2013-07-31T08:08:59.683 回答
0

我会编程:

public static void main( String argv[] ) {
        String line = "a=1,b=\"1,2\",c=\"[d=1,e=1,11]\"";

        boolean quote = false;
        String token = "";
        List<String> tokens = new ArrayList<String>();
        for( int i=0; i < line.length(); i++ ) {
            char c = line.charAt( i );

            switch( c ) {
                case ',':
                    if( quote ) {
                        token += c;
                    } else {
                        tokens.add( token );
                        token = "";
                    }
                    break;

                case '"':
                case '\'':
                    quote = !quote;
                    token += c;
                    break;

                default:
                    token += c;
                    break;
            }
        }
        tokens.add( token );

        System.out.println( tokens );
    }

输出:

[a=1, b="1,2", c="[d=1,e=1,11]"]
于 2013-07-31T08:29:48.327 回答