使用正则表达式搜索带有时间戳的文件名

Toto07

我有一个从指定文件夹中读取文件的功能。它使用xml文件获取文件名及其路径。当文件名是Finance.csv时,它工作正常,但现在要求已更改,文件名具有时间戳记(Finance_May2016.csv),并且配置文件具有以下内容

<filename>Finance_{Date:mmmYYYY}.csv <\filename>
<Path> C:\folder <\Path>

到目前为止,我有这个

public string GetFullName(string source, string path)
{
    string formatPrefix = "Date";
    string regex = string.Format("{{{0}(:([^}}]*))?}}", formatPrefix);
    string replacement = @"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}";
    Regex rgx = new Regex(regex);
    string result = rgx.Replace(source, replacement);
    FileInfo[] filePath = new DirectoryInfo(path).GetFiles();
    var Filename = filePath.FirstOrDefault().Name;
    var matches = Regex.Matches(Filename, result);
    if (matches.Count == 1)
    {
        return Filename;
    }
    return "";
}

因此,这里我从配置文件中传递文件名和路径,并比较文件夹中是否有与DateTime配置文件中设置的名称和格式匹配的文件。到目前为止,它仍然有效,但是由于正则表达式是硬编码的,因此它仅搜索mmmYYYY日期格式,如果在配置文件中设置了新的文件名格式(如),该怎么办{Date:ddmmyyyy}_Finance.csv当前的正则表达式将无法正常工作。

我的问题在这里,还有其他更优雅的方式来实现这一目标吗?我尝试使用Directory.Getfiles()一些搜索模式过滤器,但是没有运气。

在此先感谢您的任何信息

埃内斯托·德露西亚

从上面的代码中,您正在寻找带有FinanceMMMyyyy.csv模式的文件。然后,您检索找到的第一个文件。以下代码更具可读性。由于这个原因,我想避免使用正则表达式。

using System;
using System.IO;

var MONTH_CHARS = 3;
var YEAR_CHARS = 4;
var FILE_NAME = "Finance";

string filePattern = @"Finance*.csv";
string path = @"c:\temp\";



    foreach (var filePath in Directory.GetFiles(path, filePattern))
{
    var startIndex = FILE_NAME.Length;
    var fileName = Path.GetFileName(filePath);
    var month = fileName.Substring(startIndex, MONTH_CHARS);
    var year = fileName.Substring(startIndex + MONTH_CHARS, YEAR_CHARS);

    Console.WriteLine(fileName + "," + month + year);

    if (string.IsNullOrEmpty(month) || string.IsNullOrEmpty(year)) continue;

    //Check for proper month and year here

    resultingFileName = fileName;

    break;
}

Console.WriteLine(resultingFileName);

对于日期在文件名开头的情况,可以执行以下操作:

 var MONTH_CHARS = 2;
 var YEAR_CHARS = 4;
 var FILE_NAME = "Finance";


 string filePattern = @"*Finance.csv";
 string path = @"c:\temp\";
 var resultingFileName = "";
 var startIndex = 0;

 foreach (var filePath in Directory.GetFiles(path, filePattern))
 {

     var fileName = Path.GetFileName(filePath);

     var year = fileName.Substring(startIndex , YEAR_CHARS);
     var month = fileName.Substring(YEAR_CHARS, MONTH_CHARS);
     var endingFileName = fileName.Substring(YEAR_CHARS + MONTH_CHARS);


     if (string.IsNullOrEmpty(month) || string.IsNullOrEmpty(year) || 
            string.IsNullOrEmpty(endingFileName)) continue;

     //Check for proper month and year here

     resultingFileName = fileName;

     break;
 }

 Console.WriteLine(resultingFileName);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在R中使用正则表达式过滤带有时间戳的日期

使用正则表达式搜索文件名

使用Curl命令输出带有时间戳的文件名

使用数据框scala创建带有时间戳的csv文件作为文件名

fluentd - 如何获取带有时间戳的日志文件名

试图弄清楚如何在有时间的输入中使用正则表达式

使用正则表达式Grep多个文件以指定要搜索的文件名

带有星号的文件名的正则表达式

正则表达式:如何获取带有特殊字符的完整文件名

如何使用正则表达式从json搜索和修剪图像文件名?

使用正则表达式匹配文件名

使用正则表达式提取文件名

删除文件名带有时间戳的文件夹中的所有文件

如何将带有时间戳的excel文件名转换为日期时间格式

接收文件名中带有时间戳的文件的合适方法是什么?

使用Ruby正则表达式匹配文件名的最有效方法

使用正则表达式查找带有参数给出的扩展名的文件

使用带有正则表达式的Notepad ++将字符串(具有可变文件名)替换为其他字符串

在电视节目文件名的字符串中搜索正则表达式

找不到带有Python正则表达式':'字符的时间戳

gitlab backup:没有时间戳的备份文件名

如何通过Python在属性文件中使用带有正则表达式字符串的正则表达式模式进行搜索

Python正则表达式文件名匹配

正则表达式验证文件名

正则表达式文件名

正则表达式匹配文件名

排除文件名的正则表达式

正则表达式无法匹配文件名

正则表达式以匹配KB文件名