2017-09-28 110 views
-3

我有一个名为像这样的本地目录多个文件:正则表达式 - 从文件名中的文件列表中提取日期

asd-3A-yyyyMMdd 

其中YYYYMMDD表示日期。 还有一些文件名为:

bcd-3A-yyyyMMdd 

和一群具有不同名称的文件,unnecesary给我的。 如何仅从asd开始的文件中提取日期? 我试过的东西似乎工作。

+1

你能告诉我们你试过了什么吗?我们可以从那里出发。 – louisfischer

回答

2

解决方案

此正则表达式

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

enter image description here

将执行以下操作

  • 要求字符串
    • 开始与人物asd-
    • 后跟一个数字一个字母,和-
    • 后面数字类似的日期。
  • 创建下列捕获组
    • 0整个匹配的字符串
    • 1年
    • 2月
    • 3天

:Th是正则表达式不验证日期是合法的。

参见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 
相关问题