Java:使用Regex拆分字符串

时间:2016-03-07 11:45:15

标签: java regex

我必须使用逗号(,)作为分隔符拆分字符串,并忽略引号内的任何逗号(“)

fieldSeparator : ,
fieldGrouper : "

要拆分的字符串是:"1","2",3,"4,5"

我能够实现如下:

String record = "\"1\",\"2\",3,\"4,5\"";
String[] tokens = record.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

输出:

"1"
"2"
3
"4,5"

现在的挑战是fieldGrouper(“)不应该是拆分令牌的一部分。我无法弄清楚这个正则表达式。

分割的预期输出是:

1
2
3
4,5

4 个答案:

答案 0 :(得分:4)

<强>更新

String[] tokens = record.split( "(,*\",*\"*)" );

结果:
Image Link

  

初始解决方案:
  (不起作用@ .split方法)

     

此RexEx模式将隔离您想要的部分:
  (?:\\")(.*?)(?:\\")

     

它使用非捕获组来隔离转义引号对,   和一个捕捉小组隔离其间的一切。

     

在这里查看:   的 Live Demo

答案 1 :(得分:2)

我的建议:

"([^"]+)"|(?<=,|^)([^,]*)

请参阅regex demo。它将匹配"..."类似字符串并仅捕获引号之间的内容,然后匹配并捕获到字符串开头的,以外的第2组字符序列或逗号之后。

这是Java sample code

String s = "value1,\"1\",\"2\",3,\"4,5\",value2";
Pattern pattern = Pattern.compile("\"([^\"]+)\"|(?<=,|^)([^,]*)");
Matcher matcher = pattern.matcher(s);
List<String> res = new ArrayList<String>();
while (matcher.find()){                      // Run the matcher
    if (matcher.group(1) != null) {          // If Group 1 matched
        res.add(matcher.group(1));           // Add it to the resulting array
    } else {
        res.add(matcher.group(2));           // Add Group 2 as it got matched
    }
} 
System.out.println(res); // => [value1, 1, 2, 3, 4,5, value2]

答案 2 :(得分:1)

我会尝试使用这种解决方法:

String record = "\"1\",\"2\",3,\"4,5\"";
record = record.replaceAll("\"?(?<!\"\\w{1,9999}),\"?|\""," ");
String[] tokens = record.trim().split(" ");
for(String str : tokens){
    System.out.println(str);
}

输出:

1
2
3
4,5

答案 3 :(得分:0)

我的主张:

string[] replies