2010-05-08 102 views
4

應該是什麼樣的匹配正則表達式的日期

26FEB2009 
30 Jul 2009 
27 Mar 2008 
29/05/2008 
27 Aug 2009 

任何格式的日期應該是什麼是正則表達式的正則表達式?

我有與26月 - 2009年2009年2月26日用,但不與26FEB2009匹配正則表達式。所以,如果有人知道,那麼請更新它。

(?:^|[^\d\w:])(?'day'\d{1,2})(?:-?st\s+|-?th\s+|-?rd\s+|-?nd\s+|-|\s+)(?'month'Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[uarychilestmbro]*(?:\s*,?\s*|-)(?:'?(?'year'\d{2})|(?'year'\d{4}))(?=$|[^\d\w]) 

日期26FEB2009是其他字符串如FUTIDX 26FEB2009 NIFTY 0的串並從HTML頁面解析,所以我無法設置空格或分隔符。

編輯 例子:

07.11.2008 
Jan 11 2008 
May 26 2008 
26FEB2009 
27 Mar 2008 

回答

1

如果它符合2009年2月26日,而不是26FEB2009,聽起來像是你需要做的空白和分隔符( - 和「/」,「」),每個日期間段可選。

+元字符指定一個或多個,考慮使用*(零或多個)作爲空白。

編輯

我的意思是,如果你的正則表達式是匹配與空白/分隔符日期,但沒有任何人是不匹配的日期即26FEB2009,那麼它聽起來就像你指定匹配時必須使用空格/分隔符。

這裏的東西我趕緊敲起來:

(\d{1,2})(\/|-|\s*)?((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)|\d{2})(\/|-|\s*)?(\d{4}) 

你可能要檢查它沒有丟失,你希望某些功能,但它符合所有的例子。

+0

@ Moonshield,日期** ** 26FEB2009是其他字符串如** FUTIDX 26FEB2009 NIFTY的子0 **並從html頁面解析,所以我不能設置空格或分隔符。 – Harikrishna 2010-05-08 12:53:22

+0

@Moonshield:因爲他的月份可能是'2月'或'FEB',所以我會在正則表中將月份列爲小寫。被測試的字符串可以是'.ToLower()'。 – IAbstract 2010-05-08 13:26:23

+0

@ dboarman-FissureStudios:好點,我測試了正則表達式的小部件,它打開了「不區分大小寫」。 – Moonshield 2010-05-08 13:31:39

4

我建議你不要使用正則表達式來解析日期,甚至強烈反對使用正則表達式來解析HTML。對於解析日期可能會看一看的TryParseExact方法和解析HTML DOM解析器如Html Agility Pack

var dateStr = "26FEB2009"; 
var formats = new[] 
{ 
    "ddMMMyyyy", "dd MMM yyyy", "dd/MM/yyyy" 
}; 
DateTime date; 
if (DateTime.TryParseExact(
    dateStr, 
    formats, 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.NoCurrentDateDefault, 
    out date)) 
{ 
    // You have a match, use the date object 
} 
+0

@Darin Dimitrov,它是.net中的內置方法嗎? – Harikrishna 2010-05-10 06:21:19

+0

是的,我已將它鏈接到MSDN。 – 2010-05-10 06:24:47

+0

@Darin Dimitrov,Ok ..那麼,我們必須在參數中定義不同的格式,並且我們在format參數中定義的所有日期都將匹配?它是開源的DLL?我可以從哪裏下載它? – Harikrishna 2010-05-10 06:43:10