我需要找到一个正则表达式,从几个文件的名称中提取日期部分。
特别是我有这两种格式:
ATC0200720140828080610.xls
ATC0200720140901080346_UFF_ACC.xls
我使用这两个正则表达式来检查文件名格式:
^ATC02007[0-9]{14}.xls$
^ATC02007[0-9]{14}_UFF_ACC.xls$
但我需要一个正则表达式来提取特定部分:
constant | yyyyMMddHHmmss | constant
^ ^ ^
ATC02007 | 20140901080346 | _UFF_ACC.xls
我正在使用的正则表达式匹配整个文件名,所以我不能用来提取中间部分,那么哪个是正确的表达式?
答案 0 :(得分:2)
答案 1 :(得分:1)
您需要使用捕获组。
^(ATC02007)([0-9]{14})((?:[^.]*)?\\.xls)$
GRoup索引1包含第一个常量,第2组包含日期和时间,第3组包含第三个常量。
String s = "ATC0200720140828080610.xls\n" +
"ATC0200720140901080346_UFF_ACC.xls";
Pattern regex = Pattern.compile("(?m)^(ATC02007)([0-9]{14})((?:[^.]*)?\\.xls)$");
Matcher matcher = regex.matcher(s);
while(matcher.find()){
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
}
<强>输出:强>
ATC02007
20140828080610
.xls
ATC02007
20140901080346
_UFF_ACC.xls