2014-11-14 161 views
0

我需要從兩個日期中提取日期信息:正則表達式來提取日期,月份和年份seeparately從DD/MM/YY和月DD,YYYY

Monday, Sep 1, 2014 10:00 AM 

01/09/14 

這樣我有一天(01),月(09)和今年(2014)

我能與此正則表達式來提取一天(01):

\s+.*?(\d+)\/*,* 

我已經沒有運氣與提取年,我完全無法提取月份。 請幫忙。從第一日的 (.+),\s(\.+)\s(\d+),.*

和:

+2

哪種編程語言是您使用? – 2014-11-14 13:54:39

+0

正則表達式會知道'Sep'是一個月嗎? – 2014-11-14 14:02:14

回答

1

這是一個組合的正則表達式。你可以從它得到兩個表單。

如果它的 「週一,2014年9月1日」 格式化捕捉組將是:

1: Sep 
3: 1 
4: 2014 

和 「14年1月1日」,他們將是:

2: 01 
3: 01 
4: 14 

只是檢查如果存在第二組用於檢查是否該值是第二格式:

^\w*(?:, (\w{3})|(\d{2}))[\/ ]\s*(\d{1,2})(?:/|,)(\d{2,4}) 

Regular expression visualization

Debuggex Demo

說明:

  1. 開始在字符串開頭
  2. 跳過可選平日
  3. 答:跳過 「」 再取3個字母的月份
  4. B:走第一個號碼
  5. 跳過「」或/
  6. tak È第二數目(1 「09月01日」)
  7. 跳過/或 「」
  8. 需要2-4年份代碼
+0

你可以建議如何使用SimpleDateFormat解析使用這個正則表達式的日期嗎? – user2281204 2014-11-18 06:09:37

0

可以使用提取的第一次約會的數據 (\d+)\/(\d+)\/(\d+)

只是,如果你確定你日期輸出的格式。

1

第一日期可以與提取的以下內容:

\w+,\s\w+\s\d{1,2},\s\d{4}\s\d{2}:\d{2}\s(?:AM|PM) 

Regex Demo

這裏的主要部分是數字限於各自的數字。即。一年只能是4位數,月/日只能是2位數。如果需要,您可以更進一步,但這通常足以防止您解析的數據中出現任何誤報。

第二日期可以提取如下所示:

\d{2}/\d{2}/\d{2} 

同樣,日期的單獨的片被限制爲兩個數字,試圖減少假陽性的數量。如果數據中有其他日期格式,這將會產生誤報。在這種情況下,它需要更多的限制。還有幾件事可以做,但這取決於你的數據。

Regex Demo

然後,如果你想兩個正則表達式相結合,一個方法是做到以下幾點:

(?:\w+,\s\w+\s\d{1,2},\s\d{4}\s\d{2}:\d{2}\s(?:AM|PM)|\d{2}\/\d{2}\/\d{2}) 

Regex Demo