从文件名中提取日期

2023-12-23

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

e.g. “xxx_20100326.xls” or 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

Edit:

我喜欢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}):仅包含两位数字的捕获组。

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

$: 字符串的末尾。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从文件名中提取日期 的相关文章

  • 语言混合:模型和视图

    考虑开发一个应用程序 其中模型将使用 C 使用 Boost 编写 视图将使用 Objective C 使用 Cocoa Touch 编写 哪里有一些示例展示了如何集成 C 和 Objective C 来开发 iPhone 应用程序 直接从源
  • Dapper 强类型查询返回默认对象值

    刚刚开始使用 Dapper 并喜欢它 我遇到了问题 它返回正确数量的对象 但它们的属性都有默认值 using var dbConnection Connection await dbConnection OpenAsync const st
  • 以编程方式 Godaddy 发送的电子邮件不在“已发送邮件”文件夹中 C#.net

    我正在通过以下方式发送电子邮件ASP NET代码使用godaddy邮件服务器 邮件发送成功 但未存储在已发送邮件文件夹中 我正在使用下面的代码 SmtpClient client new SmtpClient client Host smt
  • 在两个 .cpp 文件之间定义全局变量 [重复]

    这个问题在这里已经有答案了 如何在 A cpp 和 B cpp 之间共享 全球化 bool 变量 其中它们都不包含其他 h 文件 他们有其他联合头文件 但彼此没有 我可以在这些共享标头中定义全局变量吗 Thanks 我可以在这些共享标头中定
  • 实体框架中的重复键异常?

    我试图捕获当我将具有给定用户名的现有用户插入数据库时 引发的异常 正如标题所说 我正在使用 EF 当我尝试将用户插入数据库时 引发的唯一异常是 UpdateException 如何提取此异常以识别其是否是重复异常或其他异常 catch Up
  • 禁用除滚动之外的 DataGridView

    我如何配置 datagridview 以便用户只能在行中移动并使用滚动 而没有其他 如果我禁用网格不允许我使用滚动 将您的 datagridview 设置为只读 这将禁用任何编辑 dataGridView1 ReadOnly true 在你
  • 将占位符文本添加到文本框

    我正在寻找一种将占位符文本添加到文本框的方法 就像在 html5 中使用文本框一样 IE 如果文本框没有文本 则会添加文本Enter some text here 当用户单击它时 占位符文本消失并允许用户输入自己的文本 如果文本框失去焦点并
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • initializer_list 和默认构造函数重载决策

    include
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 使用正则表达式匹配以“Id”结尾的单词?

    如何组合一个正则表达式来匹配以 Id 结尾的单词并进行区分大小写的匹配 试试这个正则表达式 w Id b w 允许前面的单词字符Id和 b确保Id位于单词末尾 b是字边界断言
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • 为什么在 .net 中使用 Invoke on Controls? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 NET不允许跨线程操作 https stackoverflow com questions 2896504 why net does not allow cross thread operat
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • 为什么 GCC 6.3 在没有显式 C++11 支持的情况下编译此 Braced-Init-List 代码?

    我有一个问题大括号括起来的列表的不同含义 https stackoverflow com q 37682392 2642059 我知道C 03不支持C 11initializer list 然而 即使没有 std c 11编译器标志 gcc
  • C# - 命名空间内的类型声明

    在命名空间内而不是在类中声明类型的可能用途是什么 For ex namespace Test public delegate void Ispossible 这是有效的并且不会产生任何编译错误 但我无法想象为什么我们会以这种方式声明它而不是
  • 如何使用eclipse构建C++应用程序

    我已经从以下位置下载了 Eclipse Juno for C here http www eclipse org downloads download php file technology epp downloads release ju
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • Intel 和 AMD 处理器有相同的汇编程序吗?

    C语言被用来编写Unix以实现可移植性 使用不同编译器编译的同一个C语言程序会产生不同的机器指令 为什么 Windows 操作系统能够在两者上运行Intel https en wikipedia org wiki Intel and AMD
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route

随机推荐

  • 重新编译 Heroku slug,无需推送或更改配置

    我想知道是否有一种方法可以强制 Heroku 重新编译 slug 而不需要推送新的提交和 或更新配置变量 我为什么要这样做 我在 Heroku 上使用 Cedar 堆栈作为 Rails 3 2 应用程序 但在使用时遇到问题rake asse
  • 加载 Keras 模型时未知的初始化程序:GlorotUniform

    我通过 google colab 训练了我的 CNN VGG 并生成了 h5 文件 现在的问题是 我可以通过 google colab 成功预测我的输出 但是当我下载 h5 训练模型文件并尝试在我的笔记本电脑上预测输出时 我在加载模型时遇到
  • 尽管安装成功但无法识别节点

    我试着跑nodejs在全新安装的Windows 7的 这就是我所做的 使用 Windows 安装程序安装节点 确保文件被提取到C Program Files x86 nodejs 确保我的 Path 环境变量包含C Program File
  • Apache C++ 模块持久全局对象

    我希望在 Apache C 模块中保持一些全局对象在 Apache 子进程调用中保持不变 我该怎么做呢 您必须使用 Apache 进程外部的某种形式的存储 基本选择 一个数据库 共享内存 取决于操作系统 另一个进程并使用IPC机制 例如套接
  • Google Calendar API - 只能更新事件一次

    我遇到了与这篇文章中描述的相同的问题 Google Calendar api v3 重新更新问题 https stackoverflow com questions 8574088 google calendar api v3 re upd
  • 将私有方法公开以对其进行单元测试...好主意吗?

    Moderator Note There are already 39 answers posted here some have been deleted Before you post your answer consider whet
  • Rstudio 的“在文件中查找”有 R 版本吗?

    我喜欢 Rstudio 的 在文件中查找 功能 您可以在指定目录中的所有文件中搜索文本 但我讨厌指定要搜索的目录和文件类型的方式 您必须单击并指向 呃 有谁知道在 R 控制台中执行此操作的简单方法 fif lt function what
  • Blazor 中的 SendGrid 电子邮件服务 - 依赖注入或静态方法

    我正在 Blazor 应用程序 NET 5 中设置 SendGrid 电子邮件发送器 根据 SendGrid 文档和示例 他们正在编写一个签名为的方法static async Task然后他们await来自他们的 API 的响应 他们的示例
  • 正则表达式在 vb6 中的用法

    我需要验证一个字符串 该字符串可能包含字母数字以及特殊字符 因为我必须传递仅包含字母字符的字符串 不允许使用数字或任何其他特殊字符 在当前的方法中 我使用 ASCII 数字来评估每个字符是否为字母 是否有其他有效的方法来发现字符串中是否存在
  • Google 地图显示空白地图

    I am currently stuck with this problem Google Maps seems not to be loading at all Please see the image below 这真让我抓狂 我已经完
  • 在python3.6上导入yarl或discord.py时出现问题

    由于列出的错误 我最近更新了discord py在这篇文章中 https stackoverflow com questions 63027848 discord py glitch or random error typeerror ne
  • 如何对齐引导表单中的元素

    请 看看我的代码 http www bootply com VcVDblSFK7 http www bootply com VcVDblSFK7 我希望将键符号和输入控件的范围放在同一行中 后 面是错误消息的范围 但我已经做了太多的编辑 并
  • 在c/c++中通过内存中的地址调用函数

    已知函数的原型及其在内存中的地址 是否可以从另一个进程或除了原型和内存地址之外一无所知的一段代码中调用该函数 如果可能的话 如何在代码中处理返回的类型 在现代操作系统上 每个进程有自己的地址空间并且地址仅在进程内有效 如果您想在其他进程中执
  • PowerManager.PARTIAL_WAKE_LOCK android

    我很困惑是否要获取这个唤醒锁 例如 我有这种类型的代码 是从onReceive of a BroadcastReceiever CONNECTIVITY CHANGE BOOT COMPLETED 等 异步地即我正在启动一个IntentSe
  • 如何读取 .lbl 文件

    我想读我的 lbl文件并将其数据存储到数据库列中 因此 每当用户想要修改它时 他们可以创建一个新的 lbl来自数据库的文件 我已经转换了我的 lbl使用下面所示的代码片段将数据转换为二进制 byte fileBytes File ReadA
  • 使用mock模拟嵌套属性

    我有一个返回对象的函数调用 r Foo x y where r具有丰富的嵌套属性集 例如 我可以访问r prop a prop b prop c 我想嘲笑Foo 这样特定的叶子属性r被修改 即使得r prop a prop b prop c
  • 使用 libxml2 进行递归 XPath 查询的最有效方法是什么?

    我为 libxml2 编写了一个 C 包装函数 它使我可以轻松地对 XML 文档进行查询 bool XPathQuery const std string doc const std string query XPathResults re
  • 阻止导航控制器影响其他视图控制器

    我有一个应用程序 它使用带有三个视图控制器的导航控制器来进行分步用户设置 因此 第一个视图将是步骤 1 第二个视图将是步骤 2 等等 所有这些都将嵌入到导航控制器中 以便用户能够来回移动 但是 一旦完成此设置并且用户按下 完成 按钮 应用程
  • Android 数据库被其他线程锁定

    我正在处理 android sqLite 数据库 其中我无法将记录插入数据库 在代码中 我在启动应用程序时仅打开数据库一次 并且设置了对我的应用程序类变量的引用 以便我可以从代码的任何部分访问数据库 并且效果很好 问题是 我可以访问数据库
  • 从文件名中提取日期

    我遇到一种情况 我需要从文件名中提取日期 其一般模式是 filename YYYYMMDD fileExtension e g xxx 20100326 xls or x2v 20100326 csv 下面的程序完成了这项工作 Number