2011-09-20 66 views
2

我正在尋找一個正則表達式,下面的日期時間格式相匹配:的日期和時間的正則表達式

dd-MMM-yyyy HH:mm:ss (15-Sep-2011 16:00:47) 

目前我只有正則表達式的日期,看起來是這樣的:

^(3[0-1]|2[0-9]|1[0-9]|0[1-9])[\s{1}|\/|-](Jan|JAN|Feb|FEB|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)[\s{1}|\/|-]\d{4}$ 

時間部分的任何想法?

沒關係,我找到了解決方案。提交給任何想要使用它的人。

(3[0-1]|2[0-9]|1[0-9]|0[1-9])[\s{1}|\/|-](Jan|JAN|Feb|FEB|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)[\s{1}|\/|-]\d{4}\s(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d 
+4

您應該在下面添加解決方案作爲答案。然後人們可以對它進行投票,然後如果沒有人提出更好的答案,就可以將其標記爲正確的答案。 –

+0

這個正則表達式可以被簡化很多。我認爲'([012]?\ d | [123] 0 | 31)([\ S/- ])(一月| 2月| 3月|四月|可能會|君|七月|八月|九月|辛| 11月|分解)\ 1 \ d {4} \ s(2 [0-3] | [01]?\ d):[0-5] \ d:[0-5] \ d'打開了'RegexOptions.IgnoreCase'更接近您的意思。 –

+0

@JustinMorgan嘗試了您的解決方案,但即使小寫也無法正常工作。 :( –

回答

0

正如喬爾在上面提出的那樣,我應該在這裏添加我的解決方案作爲答案。 所以在這裏,它是:

(3[0-1]|2[0-9]|1[0-9]|0[1-9])[\s{1}|\/|-](Jan|JAN|Feb|FEB|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)[\s{1}|\/|-]\d{4}\s(20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d 

不要讓我知道,如果它的作品了。

2

它必須是一個正則表達式嗎?

DateTime.TryParseExact會工作得更好。

DateTime myDate; 
// dd-MMM-yyyy HH:mm:ss (15-Sep-2011 16:00:47) 
if (DateTime.TryParseExact(dateAsString, 
          "dd-MMM-yyyy HH:mm:ss", 
          new CultureInfo("en-US"), 
          DateTimeStyles.None, 
          out myDate)) 
{ ... } 
+0

是的,它必須是我從文件中讀取的日期時間可以嵌入任何隨機行。 –

0

犯錯,那日期位是很難的:-)但是你可以使用的時間相同的方法,在我看來。

假設你有兩個固定的數字,你可以使用類似:

(([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9] 

的第一位是稍微有點棘手,因爲你想要的一個:後面是

  • 01數字。
  • 2其次是03

的分鐘和秒均爲:接着09

  • 05

如果您想允許一位數小時,只需將[01]替換爲[01]?即可。

您可能還想考慮人們可能會輸入novOcT作爲月份的可能性,從而使您的正則表達式不太有用。

這可以通過不區分大小寫的版本來解決,這也會減少正則表達式的大小,每個月只需要一個字符串。