2012-09-07 23 views
-1

我有一個excel文件,必須有這個名稱格式,其中xxx是一個數字,Curr是歐元或英鎊,yymmdd是日期。我的正則表達式不起作用

CDFSDDRCxxxCurryymmdd.xls(x) 

這是我正在使用的正則表達式。它不適用於像120920或121005這樣的日期。 任何想法?

Match nameIsValid = Regex.Match(activeWorkbook.Name, 
             @"CDFSDDRC(?<xxx>\d+)(?<curr>EUR|GBP)(?<yymmdd>\d{2}(?:0[1-9]|1[12])(?:(?:0|1|2)[1-9]|3[0-2]))\.xls?"); 

回答

1

要快速解決此正則表達式將是下一個簡單的一點:

CDFSDDRC(?<xxx>\d+)(?<curr>EUR|GBP)(?<yymmdd>\d{2}(?:0[1-9]|1[012])(?:(?:0|1|2)[0-9]|3[0-2]))\.xls? 

您可以檢查出來的結果here

請注意,如果該月的某天是00,則該匹配項將匹配。

我的意見是,你不應該在你的正則表達式中檢查有效日期,月份和年份。您可以通過使用符合以下6位的日期,更簡單的正則表達式:

CDFSDDRC(?<xxx>\d+)(?<curr>EUR|GBP)(?<yymmdd>\d{6})\.xls? 

後你匹配它,你就可以以編程方式檢查它是否是一個有效的日期或不是。

0

這比你有什麼

"CDFSDDRC(\d+)(EUR|GBP)(\d{2})(\d{2})(\d{2}).xls"