c# - 从文件名中提取日期

标签 c# c#-3.0

我有一种情况需要从文件名中提取日期,文件名的一般模式是 [filename_]YYYYMMDD[.fileExtension]

例如“xxx_20100326.xls”x2v_20100326.csv

下面的程序完成了工作

//Number of charecter in the substring is set to 8 
//since the length of YYYYMMDD is 8

public static string ExtractDatesFromFileNames(string fileName)
{

    return fileName.Substring(fileName.IndexOf("_") + 1, 8);
}

有没有更好的选择来实现同样的目标?

我基本上是在寻找标准做法。

我正在使用 C#3.0 和 dotnet 框架 3.5

编辑:

我喜欢LC的解决方案和回答方式。我用过他的程序,比如

string regExPattern = "^(?:.*_)?([0-9]{4})([0-9]{2})([0-9]{2})(?:\\..*)?$";
string result =  Regex.Match(fileName, @regExPattern).Groups[1].Value;

函数的输入是:"x2v_20100326.csv"

但输出是:2010 而不是 20100326(这是预期的)。

谁能帮忙。

最佳答案

我会使用正则表达式,尤其是在文件名中可能有多个下划线的情况下。然后您可以捕获年、月、日并在必要时返回 DateTime。通过这种方式,您可以确保提取文件名的正确部分,并且它确实与您正在搜索的模式相匹配。

对于模式 [filename_]YYYYMMDD[.fileExtension],我在想:

^(?:.*_)?([0-9]{4})([0-9]{2})([0-9]{2})(?:\..*)?$

然后您捕获的组将按年、月和日的顺序排列。

解释:

^:字符串的开头。

(?:.*_)?:一个可选的非捕获组,包含任意数量的字符后跟一个下划线。

([0-9]{4}):恰好包含四位数字的捕获组。

([0-9]{2}):一个包含两个数字的捕获组。

(?:\..*)?:一个可选的非捕获组,包含一个点后跟任意数量的字符。

$:字符串的结尾。

但是,我要补充一点,如果您确定您的文件名只有一个下划线,并且日期跟在下划线之后,那么您的代码会更简洁,并且可能比正则表达式稍微快一些。根据预期的输入集,需要牢记这一点。

关于c# - 从文件名中提取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3042331/

相关文章:

c# - 以编程方式创建 PowerPoint 演示文稿

c# - 需要在网页上的两点之间画一条线

c# - 使用简短的初始化语法来初始化对值列表

xml - 使用 C# LINQ to XML 解析来自国家气象服务 SOAP 服务的 XML

c# - .NET - 如何创建一个类,以便只有一个其他特定类可以实例化它?

c#-3.0 - 如何从 TreeNode.FullPath 数据获取实际的树节点?

c# - Xamarin.Forms.Xaml.XamlParseException : MarkupExtension not found

c# - 使用单例 PixelShader 应该是最佳实践吗?

c#-3.0 - C#中简化丑陋嵌套if-else树的方法

.net - 什么是datetime2?