我有一个应用程序需要查找并处理遵循非常具体的命名约定的文件,如下所示.
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)
这取决于您希望如何匹配这些名称.这是否足够具体:
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(和其他)向您展示的所有文件名,然后执行一些"常规"编程逻辑来过滤掉无效的文件名.
归档时间: |
|
查看次数: |
14242 次 |
最近记录: |