2017-09-28 139 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 
相關問題