我有一种情况,我需要从文件名中提取日期,其一般模式是
[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# 新手
无需正则表达式即可实现此目的,只需使用字符串函数(
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;
}
您可以使用正则表达式提取日期,如下所示:
.*(?<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 格式的有效日期。