我的正则表达不起作用

时间:2012-09-07 16:00:00

标签: regex

我有一个必须具有此名称格式的excel文件,其中xxx是数字,Curr是EUR或GBP而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?");

2 个答案:

答案 0 :(得分: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?

匹配后,您可以以编程方式检查它是否是有效日期。

答案 1 :(得分:0)

这比你有的简单

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