如何从文件名中提取日期部分?

时间:2014-09-19 13:59:55

标签: java regex

我需要找到一个正则表达式,从几个文件的名称中提取日期部分。

特别是我有这两种格式:

  • 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

我正在使用的正则表达式匹配整个文件名,所以我不能用来提取中间部分,那么哪个是正确的表达式?

2 个答案:

答案 0 :(得分:2)

你快到了。只需使用圆括号来包含您想要的数字。

^ATC02007([0-9]{14})(_UFF_ACC)?.xls$

example。这些数字在第1组$1中捕获。

答案 1 :(得分:1)

您需要使用捕获组。

^(ATC02007)([0-9]{14})((?:[^.]*)?\\.xls)$

DEMO

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