gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:27:19 25 4
gpt4 key购买 nike

我有一种情况需要从文件名中提取日期,文件名的一般模式是 [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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com