2014-02-14 76 views
2

我正在做一個目錄偵聽,並需要獲取所有遵循該模式的目錄名稱:Feb14-201414022014-sometext。目錄名稱不能包含點,所以我不想匹配14022014-sometext.more。就像你所看到的,我只想匹配%b%d-%Y%d%m%Y-textofanylengthWithoutDots之後的目錄。正則表達式匹配兩個日期時間格式

對於第一種情況,它應該是類似於[a-zA-Z]{3}\d{2}。我不知道如何解析其餘的,因爲我的正則表達式技能很差,對不起。所以我希望有人能告訴我什麼是正確的模式。謝謝。

回答

0

我假設每個目錄列表是由新線分離

([A-Z]\w{2}\d{1,2}\-\d{4}|\d{7,8}\-\w+)$ 

將匹配這兩種情況下,將匹配的文本,只有當它是不間斷的(由點或任何其他爲此事),直到它擊中行結束。

一些注意事項:

  • 如果你想匹配點,除了你的一切可以用[^.]+代替最終\w+
  • 您需要使用多行修飾符/m才能正常工作,否則$將僅匹配字符串的末尾。
  • 我沒有添加^的正則表達式的開始,但你可以這樣做,如果每一行包含一個目錄
  • 當然,你可以擴展這個正則表達式包括(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)而不是[A-Z]\w{2}。我沒有這樣做,以保持它的可讀性。我也建議你將它存儲在一個python數組中,併爲了維護而將它動態地插入到你的正則表達式中。

看到它在行動:http://regex101.com/r/pS6iY9

+0

感謝。還有一件事:如果我想匹配'Feb14-2014_xyz'呢?所以2014年之後的任何\ + w(如第二種情況)。我怎樣才能做到這一點?我試過了([A-Z] \ w {2} \ d {1,2} \ - \ d {4} \ w + | \ d {7,8} \ - \ w +)$'編輯:我想通了。這是行得通的:'([AZ] \ w {2} \ d {1,2} \ - \ d {4} \ w + | [AZ] \ w {2} \ d {1,2} \ - \ d {4} | \ d {7,8} \ - \ w +)$' – Cecil

0

這很簡單。 最好的一個,我可以做的是:

((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d\d-\d\d\d\d)|(\d\d\d\d\d\d\d\d-\w+) 

第一部分((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d\d-\d\d\d\d)第一種日期和第二部分(\d\d\d\d\d\d\d\d-\w+)匹配 - 第二類。