对于项目,我需要拆分以下字符串
210,'T99, Woody & Paul',1,'Geen omschrijving',5,3,7,'2008-04-12 21:00:00',16
进入这个
210
'T99, Woody & Paul'
1
'Geen omschrijving'
5
3
7
'2008-04-12 21:00:00'
16
通过这个表达式,我可以在',
之后拆分(?<=')
我已经尝试了很多东西,但是我没有能够在没有搞砸'T99,Woody&amp;的情况下拆分整数。保罗的一部分。
甚至可以这样做吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果单引号中的逗号后跟空格,而单引号外的逗号不是,则可以直接使用:
String test = "210,'T99, Woody & Paul',1,'Geen omschrijving',5,3,7,'2008-04-12 21:00:00',16";
String[] splitted0 = test.split(",(?!\\s)");
for (String split: splitted0) {
System.out.println(split);
}
输出:
210
'T99, Woody & Paul'
1
'Geen omschrijving'
5
3
7
'2008-04-12 21:00:00'
16
具有实际Pattern
的替代解决方案:
Pattern p = Pattern.compile("(?<=,|^)('?).+?\\1(?=,|$)");
Matcher m = p.matcher(test);
while (m.find()) {
System.out.println(m.group());
}
输出:
210
'T99, Woody & Paul'
1
'Geen omschrijving'
5
3
7
'2008-04-12 21:00:00'
16
第二个解决方案并不“关心”空格,但是它们会被添加到输出中(您可以始终String.trim
)。
解释非平凡的“替代”解决方案:
(?<=,|^)
- &GT;输入或逗号开头之前的任何内容
('?)
- &GT;可选择以'
.+?
- &GT;任何角色,最多......
\\1
- &GT;对第1组的引用:'
或没有
(?=,|$)
- &GT;然后是,
或输入结束
答案 2 :(得分:0)
这是我最近在项目中用于拆分CSV文件中的条目的正则表达式模式,其中包含逗号的单元格用双引号保护:
,(?=(?:[^"]*"[^"]*")*[^"]*$)
交换单引号的双引号,您将在不同的字符上获得相同的功能。 Working example in Java
此模式不适用于单元格内的额外引号。模式是否适用于包含换行符的单元格取决于是否启用了多行搜索。