比如:
String source = "\"ab,cd\",\"how are you\",\"oh my \",god\"";如何将其split为:
"ab,cd"
"how are you"
"oh my \", god"其中逗号(,)是字符串序列的分隔符, 双引号(")是定界符,但字符串中也可以出现逗号,双引号.请高手帮我想一个正则表达式来切分字符串序列。谢谢!

解决方案 »

  1.   

     如果没有你最后一个"oh my \", god" 是很好实现的.
    但是这里具有\",这就没有规律了.到底要不要双引号呢?
      

  2.   

    String source = "\"ab,cd\",\"how are you\",\"oh my \",god\""; 
    "ab,cd","how are you","oh my ",god"
     JAVA中打印的是这个,
    "oh my \", god"  并没有这个啊楼主再把题目看看吧不然真的没有规律
      

  3.   

    谢谢乌云和雨的回复.其实这就是JSON编码格式的数组["abc","def","ghijk"]的样子
    双引号和逗号,也可以出现在字符串中,比如: "how, to\" do"我也是苦于找不出规律来
      

  4.   

    谢谢duzhonghua.反斜杠是转义用的, \" 是转双引号的String str = "oh my \", god";
    的文本输出应该是"oh my ", god"
      

  5.   

    如果就是这种简单的格式:
    "\"abc\",\"def\",\"ghi\""逗号作为分隔符,双引号作为字符串的定界符,且字符串内不准包含逗号和双引号, 正则表达式该如何表达?"abc"
    "def"
    "ghi"
      

  6.   

    JSON中也是支持单引号的.
    你的\"oh my \",god\"  要是能改成\"oh my ',god\"就简单多了 ;或者\"oh my \",god\"改成'oh my \",god'也很简单
      

  7.   

    单引号也有同样问题,因为单引号同时也是个合法字符可能会出现在字符串中,比如: 'abc\'def'所以我先假定定界符和分隔符不会出现在字符串中的情况,该如何描述
      

  8.   

    莫名其妙
    \"ab,cd\"
    按照你后面的逻辑,前面的"ab,cd\"也可以解释为ab,cd\吧把oh my \ 改为oh my \\吧
      

  9.   

    虽然已经结了,但是还是贴出来吧
    我们要相信:正则是无所不能的!!!public class Test4 {
    public static void main(String[] args) {
    String source = "\"ab,cd\",\"how are you\",\"oh my \",god\",\"aa,\"bb\"";
    String reg = "(?<![^\",]),(?=\")";
    String[] array = source.split(reg);
    for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
    }
    }
    }
      

  10.   

    不过这个格式是有缺陷的比如说既然允许字段值是 "aa,"bb" 这样的,那肯定也允许某个字段是这样的 "aa","bb"
    这种情况就会产生歧义!这个到底表示 "aa","bb" 呢还是表示 "aa" 和 "bb" 呢?
      

  11.   

    如果引号中的引号采用两个引号的话,那就是标准的 CSV 文件格式,可以用下面的代码解析:import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test01 {
        
        public static void main(String[] args) {
            String str = "\"ab,cd\",\"how are you\",\"oh my\"\",god\"";
            String regex = "\\G(?:^|,)(?:\"([^\"]*+(?:\"\"[^\"]*+)*+)\"|([^\",]*+))";
            Matcher main = Pattern.compile(regex).matcher(str);
            Matcher mquote = Pattern.compile("\"\"").matcher("");
            while (main.find()) {
                String field;
                if (main.start(2) >= 0) {
                    field = main.group(2);
                } else {
                    field = mquote.reset(main.group(1)).replaceAll("\"");
                }
                System.out.println("Field [" + field + "]");
            }
        }
    }
      

  12.   


    谢谢了,
    根据你的建议,我想先将所有\"替换成\"\", 然后编码成JSON格式,然后再decode.
    例如:
    String name = "Zhu, Jianqiang";
    String description = "It's \"Zhu, Jianqiang\"";Step 1, 替换:
    Zhu, Jianqiang
    It's ""Zhu, Jianqiang"""Step 2, 编码:
    encode后的结果: [\"Zhu, Jianqiang\", \"It's \"\"Zhu, Jianqiang\"\"\"]Step 3, 解码:
    然后采用你提供的pattern,就可分解为:
    Zhu, Jianqiang
    It's "Zhu Jianqiang"
      

  13.   

    Google的json库也没法解析这种格式:
    String src = "\"How \"are you\"";
    GSON.fromJson( src, String.class);
    结果是:
    How只能写成如下样式:
    String src = "\"How \\\"are you\"";
    GSON.fromJson( src, String.class);
    结果是:
    How "are you
      

  14.   

    正则表达式是用来匹配的
    这个直接用split根据逗号和双引号分割字符串