Regex-从文件列表中的文件名中提取日期

Regex-从文件列表中的文件名中提取日期,regex,date,filenames,Regex,Date,Filenames,我在本地目录中有多个文件,名称如下: asd-3A-yyyyMMdd 其中yyyyMMdd表示一个日期。 还有一些文件名为: bcd-3A-yyyyMMdd 还有一堆不同名字的文件,我不需要。 如何仅从以asd开头的文件中提取日期? 我试过的似乎都不管用。解决方案 这个正则表达式 asd-[0-9][a-z]-([0-9]{4})([0-9]{2})([0-9]{2}) 将执行以下操作 要求字符串 以字符asd- 后跟一个数字、一个字母和一个- 后跟类似日期的数字 创建以下捕获组

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

asd-3A-yyyyMMdd
其中yyyyMMdd表示一个日期。 还有一些文件名为:

bcd-3A-yyyyMMdd
还有一堆不同名字的文件,我不需要。 如何仅从以asd开头的文件中提取日期? 我试过的似乎都不管用。

解决方案 这个正则表达式

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

将执行以下操作

  • 要求字符串
    • 以字符
      asd-
    • 后跟一个数字、一个字母和一个
      -
    • 后跟类似日期的数字
  • 创建以下捕获组
    • 将整个匹配字符串设置为0
    • 1年
    • 本月2日
    • 3日
注意:此正则表达式不验证日期是否合法

例子 另见

给定以下示例文本

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