Java Regex-只提取日期no和no或txt和代码

Java Regex-只提取日期no和no或txt和代码,java,regex,Java,Regex,我有这样的清单 List<String> lista = Arrays.asList("[2017-07-01,1234567890,1234567890,06CA...]", "[2017-07-02,1234567890,txt,06CA...]"); 但是这个给我 Group 0 : 2017-07-02,1234567890,1234567891,02BA... Group 1 : 2017-07-02

我有这样的清单

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

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

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

第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(",");
然后通过执行以下操作将其拆分:

yourString.substring(1, yourString.length() - 1);
stripped.split(",");
这将生成一个与您期望的格式完全相同的数组:

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

您有输入错误-
\\(w+)
必须是
(\\w+)
(在末尾),请参阅。顺便说一句,捕获组太多了,为什么要使用
(,)
?试试看,你为什么不干脆用逗号分开呢?不需要使用复杂的正则表达式。我希望每个都是group@Wasfy“每个”是什么?您是否正在尝试创建Java正则表达式返回子匹配?使用Java正则表达式是不可能实现的。你真的应该把
[
]
两端都去掉,然后
分开(“\\s*,\\s*”)
这个问题似乎是@Wasfy的翻版,不用担心,很高兴我能帮上忙:)