我必须使用逗号(,)作为分隔符拆分字符串,并忽略引号内的任何逗号(“)
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
答案 0 :(得分:4)
<强>更新强>
String[] tokens = record.split( "(,*\",*\"*)" );
结果:
初始解决方案:
(不起作用@.split
方法)此RexEx模式将隔离您想要的部分:
(?:\\")(.*?)(?:\\")
它使用非捕获组来隔离转义引号对, 和一个捕捉小组隔离其间的一切。
在这里查看: 的 Live Demo 强>
答案 1 :(得分:2)
我的建议:
"([^"]+)"|(?<=,|^)([^,]*)
请参阅regex demo。它将匹配"..."
类似字符串并仅捕获引号之间的内容,然后匹配并捕获到字符串开头的,
以外的第2组字符序列或逗号之后。
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