正则表达式在运行时替换模式(C#3.0)

时间:2010-05-02 19:16:57

标签: regex c#-3.0

我有一个要求。

我在一个文件夹中有一些文件,其中一些文件名看起来像是

**EUDataFiles20100503.txt, MigrateFiles20101006.txt.**

基本上这些是我需要处理的文件。

现在我有一个配置文件,其中提到文件模式类型为

EUDataFilesYYYYMMDD,MigrateFilesYYYYMMDD

基本上,用户可以配置文件模式,并根据提到的模式,我需要搜索文件夹中存在的那些文件。

即。 在运行时,YYYYMMDD将被年月和日期值替换。那里的日期并不重要(但没有时间戳;只有日期)。

并且 EUDataFiles或MigrateFiles名称将在那里。(它们是固定的)

即。如果文件夹的文件名为EUDataFile20100504.txt(即2010年,05年,第04天),我应该忽略此文件,因为它不是EUDataFiles20100504.txt(请注意,该名称是复数 - 文件而不是系统将忽略该文件的文件。)

同样,如果模式以EUDataFilesYYYYMMDD的形式给出,如果文件存在的类型为EUDataFilesYYYYDDMM,那么系统也应该忽略。

我该如何解决这个问题?是否可以使用正则表达式(在运行时替换模式)?

如果有的话,任何人都可以帮助我出去吗?

我正在使用C#3.0和dotnet framework 3.5。

由于

1 个答案:

答案 0 :(得分:1)

您可以从基本文件名加上(取决于模式)子正则表达式构造正则表达式。

子正则表达式可能是

 yyyy = @"\d{4}"

(除非您想限制特定年份范围)

 mm = @"(1[0-2]|0[1-9])"
 dd = @"(3[01]|[12][0-9]|0[1-9])"

通过以正确的顺序添加正则表达式来构建正则表达式:

 re = @"\AEUDataFiles" + yyyy + mm + dd + @"\.txt\Z"

然后你可以检查你找到的文件名是否与正则表达式匹配:

foundMatch = Regex.IsMatch(subjectString, re);

当然,这不是对正确日期的验证(20100231会通过),但在这种情况下这可能不是问题。