C# - Regex - 根据特定的命名模式匹配文件名

And*_*rew 12 c# regex

我有一个应用程序需要查找并处理遵循非常具体的命名约定的文件,如下所示.

IABC_12345-0_YYYYMMDD_YYYYMMDD_HHMMSS.zip
Run Code Online (Sandbox Code Playgroud)

我无法使用搜索模式看到任何简单的方法,所以我假设在使用更简单的通配符模式生成文件列表后,我必须做类似的事情.

RegEx re = new RegEx("blah");

foreach(FileInfo fi in Directory.GetFiles(path, "I*.zip"))
{
    if(re.IsMatch(fi.Name))
       //blah blah blah
}
Run Code Online (Sandbox Code Playgroud)

这是最好的方法,如果是这样,我将如何形成一个正则表达式来匹配这种文件格式?

xcu*_*cud 17

    string pattern = @"I[A-Z]{3}_\d{5}-\d_\d{8}_\d{8}_\d{6}\.zip";
    var matches = Directory.GetFiles(@"c:\temp")
        .Where(path => Regex.Match(path, pattern).Success);

    foreach (string file in matches)
        Console.WriteLine(file); // do something
Run Code Online (Sandbox Code Playgroud)


Bar*_*ers 7

这取决于您希望如何匹配这些名称.这是否足够具体:

I[A-Z]{3}_\d{5}-\d_\d{8}_\d{8}_\d{6}\.zip
Run Code Online (Sandbox Code Playgroud)

说明:

I             // match an 'I'
[A-Z]{3}      // followed by three upper case letters
_             // followed by an underscore
\d{5}         // followed by five digits
-             // followed by a hyphen
\d            // followed by a single digit
_             // followed by an underscore
\d{8}         // followed by eight digits
_             // followed by an underscore
\d{8}         // followed by eight digits
_             // followed by an underscore
\d{6}         // followed by six digits
\.zip         // followed by '.zip'
Run Code Online (Sandbox Code Playgroud)

但是,如果您的文件名称包含无效的日期或时间,则实际上不能单独使用regex,特别是如果您的DATE_DATE部件指定了日期范围.您将必须匹配I(和其他)向您展示的所有文件名,然后执行一些"常规"编程逻辑来过滤掉无效的文件名.