正则表达式 - 仅提取日期no和no或txt和代码

时间:2017-07-31 09:15:40

标签: java regex

我有这样的名单

List<String> lista = Arrays.asList("[2017-07-01,1234567890,1234567890,06CA...]",
                                   "[2017-07-02,1234567890,txt,06CA...]");

我试过这个正则表达式

(\\d{4}-\\d{2}-\\d{2})(\\,)(\\w+)(\\,)(\\w+)(\\,)(\\w+)\\(w+)

但是这给了我

Group 0 : 2017-07-02,1234567890,1234567891,02BA...
Group 1 : 2017-07-02
Group 2 : ,
Group 3 : 1234567890
Group 4 : , 
Group 5 : 1234567891
Group 6 : 06CA...

我希望输出这样:

Group 0: date
Group 1: no1
Group 2: no2 or txt
Group 3: code

1 个答案:

答案 0 :(得分:1)

正则表达式匹配器始终按如下方式返回组:

组0:完全匹配
第1组:捕获组1 第2组:......

您最终获得额外群组的原因是因为您还在捕捉逗号。

此正则表达式将产生以下组:

(\\d{4}-\\d{2}-\\d{2}),(\\w+),(\\w+),(\\w+)

第0组:完全匹配(即方括号内的所有内容)
第1组:日期
第2组:第1号 第3组:第2号或文字
第4组:代码

但是,更好的方法是通过执行以下操作来剥离[]

yourString.substring(1, yourString.length() - 1);

然后通过执行以下操作进行拆分:

stripped.split(",");

这将产生一个完全符合您预期格式的数组:

[0] -> Date
[1] -> No 1
[2] -> No 2 or Text
[3] -> Code