正则表达式 - 从文件列表中的文件名中提取日期

时间:2017-09-28 12:30:24

标签: regex date filenames

我在本地目录中有多个文件,名称如下:

[^+]

yyyyMMdd表示日期。 还有一些名为:

的文件
asd-3A-yyyyMMdd

还有一堆不同名字的文件,对我来说是不必要的。 如何仅从以 asd 开头的文件中提取日期? 我尝试的任何东西似乎都没有用。

1 个答案:

答案 0 :(得分:4)

解决方案

这个正则表达式

asd-[0-9][a-z]-([0-9]{4})([0-9]{2})([0-9]{2})

enter image description here

将执行以下操作

  • 要求字符串
    • 以字符asd-
    • 开头
    • 后跟一个数字和一个-
    • 后面是类似日期的数字。
  • 创建以下捕获组
    • 0整个匹配的字符串
    • 1年
    • 本月2日
    • 每天3次

注意:此正则表达式不会验证日期是否合法。

实施例

另见Live Demo

给出以下示例文本

bsd-3A-20170523
asd-3A-20170523
NotTheDroidsYourLookingFor-20171131
asd-1D-20170523

返回以下匹配

Match 1
Full match  16-31   `asd-3A-20170523`
Group 1.    23-27   `2017`
Group 2.    27-29   `05`
Group 3.    29-31   `23`

Match 2
Full match  68-83   `asd-1D-20170523`
Group 1.    75-79   `2017`
Group 2.    79-81   `05`
Group 3.    81-83   `23`

解释

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  asd-                     'asd-'
--------------------------------------------------------------------------------
  [0-9]                    any character of: '0' to '9'
--------------------------------------------------------------------------------
  [a-z]                    any character of: 'a' to 'z'
--------------------------------------------------------------------------------
  -                        '-'
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [0-9]{4}                 any character of: '0' to '9' (4 times)
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  (                        group and capture to \2:
--------------------------------------------------------------------------------
    [0-9]{2}                 any character of: '0' to '9' (2 times)
--------------------------------------------------------------------------------
  )                        end of \2
--------------------------------------------------------------------------------
  (                        group and capture to \3:
--------------------------------------------------------------------------------
    [0-9]{2}                 any character of: '0' to '9' (2 times)
--------------------------------------------------------------------------------
  )                        end of \3