如何使用 C# 仅从文件名中提取日期

问题描述 投票:0回答:2

我有一种情况,我需要从文件名中提取日期,其一般模式是

[XXXX_BBBB]_YYYY-MM-DD[.fileExtension]
示例
Sales_person_2019-05-03.xlsx

我在 SSIS 脚本任务组件中使用 C# 来实现此目的。

下面是我的代码:

public void Main()
{

            // TODO: Add your code here
   string pat;
   string date;
   string filename = 'Sales_person_2019-05-03.xlsx'

   // Get the Date part from the file name only
   pat = @"[0-9]{2}[0-9]{2}[0-9]{4}";
   Regex r = new Regex(pat, RegexOptions.IgnoreCase);
   date = r.Match(filename);
   MessageBox.Show(date.ToString());}


    Dts.TaskResult = (int)ScriptResults.Success;
}

但这不起作用。有人可以帮忙吗? C# 新手

c# regex ssis etl script-task
2个回答
0
投票

无需正则表达式即可实现此目的,只需使用字符串函数(

IndexOf()
Substring()
):

由于您正在处理固定模式

[XXXX_BBBB]_YYYY-MM-DD[.fileExtension]
,因此只需检索第二个下划线之后的 10 个字符即可。

public void Main()
{

    string filename = "Sales_person_2019-05-03.xlsx";

    // Get the Date part from the file name only
    string filedate = filename.Substring(filename.IndexOf('_',filename.IndexOf('_') + 1) + 1,10);

    DateTime dt = DateTime.ParseExact(filedate, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None)

    Dts.TaskResult = (int)ScriptResults.Success;
}

0
投票

您可以使用正则表达式提取日期,如下所示:

.*(?<DateInFile>\d{4}-\d{2}-\d{2}).*?

下面的屏幕截图显示您可以获取正则表达式组 DateInFile 中的值,将“-”替换为“/”是这些字符的替换。我使用的工具是 Regex 101。我不拥有这个网站,我只是在 Steve Gordon (MVP) 主持的关于 C# 中的 Regex 的 Pluralsight 课程中发现了它。

https://regex101.com/

要访问日期时间值,您应该使用 C# 中的 DateTime.TryParseExact 方法来验证文件名中输入的日期实际上是 yyyy-MM-dd 格式的有效日期。

Regex 101 testrun

© www.soinside.com 2019 - 2024. All rights reserved.