首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式检查文件格式在C#中是否符合预期

正则表达式检查文件格式在C#中是否符合预期
EN

Stack Overflow用户
提问于 2016-06-29 17:36:15
回答 8查看 838关注 0票数 3

我的输入将是具有完整路径的文件名列表,并且我只需要提取文件名严格符合以下文件名格式的项。

通用文件名格式。

代码语言:javascript
运行
复制
 **c:\My\Path\To\File\fileName_YYYY-MM-DD_HH-MM-SS.ext**

我尝试过使用正则表达式模式,但仍然看到一些噪音。

代码语言:javascript
运行
复制
string regexPattern = @"fileName_[2-9][0-9]{3}-[0-1][0-9]-[0-3][0-9]_[0-2][0-9]-[0-5][0-9]-[0-5][0-9]\.ext$"

如果我遗漏了什么,请告诉我。

EN

回答 8

Stack Overflow用户

发布于 2016-06-29 17:52:25

既然可以使用DateTime的内置解析器,为什么还要使用正则表达式:

代码语言:javascript
运行
复制
string input = c:\My\Path\To\File\fileName_YYYY-MM-DD_HH-MM-SS.ext;
string filename = Path.GetFilenameWithoutExtension(input);

string[] parts = filename.Split('_');
if (parts.Length != 3) { /*Invalid*/ }

if (Path.GetExtension(input) != "ext") { /*Invalid*/ }

if (parts[0] != "filename") { /*Invalid*/ }

DateTime dt;
if (!DateTime.TryParseExact(parts[1] + "_" + parts[2], "yyyy-MM-dd_HH-mm-ss",
    CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) 
{ /*Invalid*/ }

//IsValid
票数 3
EN

Stack Overflow用户

发布于 2016-06-29 17:54:29

创建一个正则表达式来验证Date是一件相当复杂的事情,想象一下闰年吧。为什么不直接验证扩展名、前缀和后缀?在验证后缀时,使用DateTime.TryParse非常方便

代码语言:javascript
运行
复制
  String path = @"c:\My\Path\To\File\fileName_2016-02-29_23-56-59.ext";

  // extension ".ext"
  String ext = Path.GetExtension(fileName);
  // file name - "fileName_2016-02-29_23-56-59"
  String fileName = Path.GetFileNameWithoutExtension(path);
  // filename prefix "filename"
  String prefix = fileName.Substring(0, fileName.IndexOf('_'));
  // filename suffix "2016-02-29_23-56-59"
  String suffix = fileName.Substring(fileName.IndexOf('_') + 1);

  DateTime dt;

  bool valid = ext.Equals(".ext", StringComparison.InvariantCultureIgnoreCase) &&
               prefix.Equals("fileName") &&
               DateTime.TryParseExact(suffix, 
                 "yyyy-MM-dd_HH-mm-ss", 
                 CultureInfo.InvariantCulture, 
                 DateTimeStyles.None, 
                 out dt);
票数 2
EN

Stack Overflow用户

发布于 2016-06-29 17:45:40

你可以这样做:

代码语言:javascript
运行
复制
fileName_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.ext$

参见。

这将适用于:

代码语言:javascript
运行
复制
fileName_1234-12-12_12-12.ext
fileName_1234-12-12_12-12.ext2  (bad extension)
fileName_1234-12-12_12-1234.ext (longer numbers)
/fileName_1234-12-12_12-12.ext/anythingelse (not at the right place)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38095737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档