Java正则表达式模式分割逗号

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"]
-----------------------

I want to result

Console

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

帮助使用Java正则表达式模式分割逗号(,)

谢谢


1
根据您的要求,您必须编写自己的解析器,因为正则表达式只在遵循任何常规模式时才起作用。但在您的情况下,您想要基于“,”进行拆分,并且在“,”之后应该是字母,而此组合不应是任何括号的一部分。因此,正则表达式无法帮助解决这种类型的问题。 - Ashish Aggarwal
4个回答

3
您可以使用以下代码:
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]"

0

我在NetBeans中尝试了您的示例代码,输出结果如下。

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

这不是你想要的吗?


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]"]

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接