如何检测并提取图片文件名中的特定格式DateTime子串?
从文件名中提取日期时间子串并转为DateTime对象
核心思路
用正则表达式匹配文件名中符合要求的日期时间子串,再针对不同格式调用TryParseExact转换为DateTime对象。以下是具体实现(以C#为例):
正则表达式编写
针对你提到的三种格式,合并后的正则表达式可一次性匹配任意一种:
\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}|\d{8}_\d{6}|\d{8}
各部分含义:
\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}:匹配YYYY-MM-DD-HH-MM-SS格式\d{8}_\d{6}:匹配YYYYMMDD_HHMMSS格式\d{8}:匹配YYYYMMDD格式|:逻辑或,满足任意一种格式即可被匹配
完整代码示例
using System; using System.IO; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { // 目标文件夹路径 string folderPath = @"C:\YourImageFolder"; // 匹配三种日期格式的正则表达式 string datePattern = @"\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}|\d{8}_\d{6}|\d{8}"; // 对应三种格式的DateTime格式字符串 string[] dateFormats = { "yyyy-MM-dd-HH-mm-ss", "yyyyMMdd_HHmmss", "yyyyMMdd" }; // 遍历文件夹中的所有图片文件(可按需调整扩展名) foreach (string filePath in Directory.GetFiles(folderPath, "*.*", SearchOption.TopDirectoryOnly)) { string fileName = Path.GetFileName(filePath); // 匹配文件名中的日期子串 Match match = Regex.Match(fileName, datePattern); if (match.Success) { string dateStr = match.Value; // 尝试转换为DateTime对象 if (DateTime.TryParseExact(dateStr, dateFormats, null, System.Globalization.DateTimeStyles.None, out DateTime dateTime)) { Console.WriteLine($"文件名:{fileName},提取到的日期时间:{dateTime}"); // 此处可添加业务逻辑,比如保存日期时间、修改文件属性等 } else { Console.WriteLine($"文件名:{fileName},匹配到的子串{dateStr}无法转换为DateTime"); } } else { Console.WriteLine($"文件名:{fileName},未找到符合格式的日期子串"); } } } }
关键说明
- 正则匹配:
Regex.Match返回文件名中第一个符合格式的子串,若文件名可能存在多个符合条件的子串,可改用Regex.Matches遍历所有匹配结果。 - 格式对应:
dateFormats数组顺序可根据实际出现频率调整,TryParseExact会按顺序尝试转换,匹配到第一个合适格式即停止。 - 文件遍历:
Directory.GetFiles的第二个参数可指定图片扩展名,比如"*.jpg;*.png"来仅处理图片文件。
内容的提问来源于stack exchange,提问作者11house
相关产品推荐
相关产品推荐

