Java正则表达式:拆分逗号分隔值但忽略引号中的逗号

时间:2012-03-07 16:50:55

标签: java regex

我的文字如下:

"text","1","more, more text","3"

有人可以告诉我我必须使用什么正则表达式来获取以下内容:

text
1
more, more text
3

我正在阅读Sun教程here,直到" matcher类的方法"但我仍然不知所措。谢谢!

如果它像text,1,more那样容易,但不幸的是,它不是那样的。有什么想法吗?

6 个答案:

答案 0 :(得分:3)

尝试此模式:"(.+?)"

它将匹配双引号之间的1个或多个字符。引号之间的文本部分以matcher.group(1)形式提供。

查看Pattern类的javadoc以了解更多信息。另外,请查看matcher.find()方法。

答案 1 :(得分:1)

你可以尝试这个[^\"]+(?<!\",?)

答案 2 :(得分:1)

您可以直接使用split()方法,如下所示:

    String text = "\"text\",\"1\",\"more, more text\",\"3\"";

    String[] split = text.split("\"(,\")?");
    for (String string : split) {
        System.out.println(string);
    }

(请注意,这将返回长度为5的数组,第一个位置为空字符串)

或者,如果你想使用模式/匹配器,你可以这样做:

    Pattern pattern = Pattern.compile("\"([^\"]+)\"");
    Matcher matcher = pattern.matcher(text);
    while(matcher.find()){
        System.out.println(matcher.group(1));
    }

答案 3 :(得分:0)

你可以得到以"开头并以另一个"结束的每个部分,然后对每个部分的第一个和最后一个字符进行子串。

答案 4 :(得分:0)

你可以试试这样的东西。我知道,这不是一个好的解决方案,但它可以帮助你:)

string[] s=text.split("\",\""); 
s[0]=s[0].substring(1);
s[s.length-1]=s[s.length-1].substring(0,s[s.length-1].length);

答案 5 :(得分:0)

"[^"]*"
好像是的! 在java字符串中,您可以使用

"\"[^\"]*\""

您可以在线测试:http://www.regexplanet.com/simple/index.html