如何在字母和数字组合后拆分

时间:2013-12-02 22:05:35

标签: java regex split

对于项目,我需要拆分以下字符串

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;的情况下拆分整数。保罗的一部分。

甚至可以这样做吗?

3 个答案:

答案 0 :(得分:0)

假设格式仍然像您所描述的那样简单,以下内容将起作用:

(?<=^|,)('[^']*'|[^,]*)
您可以在http://rubular.com/r/wuPzWXOK0w

看到

答案 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

此模式不适用于单元格内的额外引号。模式是否适用于包含换行符的单元格取决于是否启用了多行搜索。