我的输入将是具有完整路径的文件名列表,并且我只需要提取文件名严格符合以下文件名格式的项。
通用文件名格式。
**c:\My\Path\To\File\fileName_YYYY-MM-DD_HH-MM-SS.ext**我尝试过使用正则表达式模式,但仍然看到一些噪音。
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$"如果我遗漏了什么,请告诉我。
发布于 2016-06-29 17:52:25
既然可以使用DateTime的内置解析器,为什么还要使用正则表达式:
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发布于 2016-06-29 17:54:29
创建一个正则表达式来验证Date是一件相当复杂的事情,想象一下闰年吧。为什么不直接验证扩展名、前缀和后缀?在验证后缀时,使用DateTime.TryParse非常方便
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);发布于 2016-06-29 17:45:40
你可以这样做:
fileName_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.ext$参见。
这将适用于:
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)https://stackoverflow.com/questions/38095737
复制相似问题