Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在运行时替换模式的正则表达式(C#3.0)_Regex_C# 3.0 - Fatal编程技术网

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

Regex 在运行时替换模式的正则表达式(C#3.0),regex,c#-3.0,Regex,C# 3.0,我有一个要求 我在一个文件夹中有一些文件,其中一些文件名看起来像say **EUDataFiles20100503.txt, MigrateFiles20101006.txt.** 基本上这些是我需要处理的文件 现在我有一个配置文件,其中提到的文件模式类型如下 EUDataFilesYYYYMMDD,migrateFilesyyymmdd 基本上,这个想法是,用户可以配置文件模式,根据上面提到的模式,我需要搜索文件夹中存在的那些文件 i、 e.在运行时,YYYYMMDD将被年、月和日期值替换。

我有一个要求

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

**EUDataFiles20100503.txt, MigrateFiles20101006.txt.**
基本上这些是我需要处理的文件

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

EUDataFilesYYYYMMDD,migrateFilesyyymmdd

基本上,这个想法是,用户可以配置文件模式,根据上面提到的模式,我需要搜索文件夹中存在的那些文件

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

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

i、 e.如果文件夹的文件名为EUDataFile20100504.txt(即2010年5月4日),我应该忽略该文件,因为它不是EUDataFile20100504.txt(请注意,名称是复数-文件,而不是系统将忽略该文件的文件)

类似地,如果模式为EUDataFilesYYYYMMDD,并且存在的文件类型为EUDataFilesYYYYDDMM,则系统也应忽略

我怎样才能解决这个问题?使用正则表达式(在运行时替换模式)是否可行

如果是这样的话,有人能帮我吗

我正在使用C#3.0和dotnetframework3.5


谢谢

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

子正则表达式可以是

 yyyy = @"\d{4}"
(除非您想限制特定的年份范围)

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

 re = @"\AEUDataFiles" + yyyy + mm + dd + @"\.txt\Z"
然后,您可以检查找到的文件名是否与正则表达式匹配:

foundMatch = Regex.IsMatch(subjectString, re);

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

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

子正则表达式可以是

 yyyy = @"\d{4}"
(除非您想限制特定的年份范围)

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

 re = @"\AEUDataFiles" + yyyy + mm + dd + @"\.txt\Z"
然后,您可以检查找到的文件名是否与正则表达式匹配:

foundMatch = Regex.IsMatch(subjectString, re);

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

EUDataFilesYYYYMMDD和EUDATAFILESYYYDDMM无法清楚区分-20100112如何?EUDataFilesYYYYMMDD和EUDATAFILESYYYDDMM无法清楚区分-20100112如何?是的,但是您可以读取用户选择的模式,并相应地重新排列正则表达式,不是吗?如果用户选择DDMMYYYY,那么您需要构建're=@“\AEUDataFiles”+dd+mm+yyyy+@“\.txt\Z”'是的,但是您可以读取用户选择的模式,并相应地重新排列正则表达式,不是吗?如果用户选择DDMMYYYY,则需要构建're=@“\AEUDataFiles”+dd+mm+yyyy+@“\.txt\Z”'