使用正则表达式从文件名中提取日期

时间:2018-11-18 11:01:33

标签: c# regex string datetime

我的姓名结构如下:

GuidAsString/yyyy/MM/dd.zip

一个例子:

e1e2e854-e1cd-4980-83bb-2a0273f904aa/2018/11/18.zip

我想使用正则表达式提取日期。正则表达式不是我的事。

更新:我正在尝试执行以下操作:

DateTime dateTime = DateTime.ParseExact(name, format, formatprovider)

,我正在寻找格式。如果您有更优雅的方式,那就更好了。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

string input = @"e1e2e854-e1cd-4980-83bb-2a0273f904aa/2018/11/18.zip";
string pattern = @"/(\d+/\d+/\d+)";
var match = Regex.Match(input, pattern);
var date = DateTime.Parse(match.Groups[1].Value);
WriteLine(date.ToShortDateString());
// Prints: 18.11.2018

单线:

var date = DateTime.Parse(Regex.Match(@"e1e2e854-e1cd-4980-83bb-2a0273f904aa/2018/11/18.zip", @"/(\d+/\d+/\d+)").Groups[1].Value);

答案 1 :(得分:2)

您可以使用正则表达式以字符串格式提取日期:

var st = "e1e2e854-e1cd-4980-83bb-2a0273f904aa/2018/11/18.zip";
var st1 = Regex.Match(st,@"\d{4}/\d{2}/\d{2}").Value;

st1 =“ 2018/11/18” 如果要转换为日期格式,请使用:

var date = DateTime.Parse(st1);

答案 2 :(得分:0)

您可以通过一些字符串操作轻松地找到解决方案。您可以使用String.Split这样的方法;

var str = "e1e2e854-e1cd-4980-83bb-2a0273f904aa/2018/11/18.zip";
var year = str.Split('/')[1];
var month = str.Split('/')[2];
var day = str.Split('/')[3].Split('.')[0];

enter image description here

您可以像这样解析您的部分

var myDate = DateTime.ParseExact($"{year}{day}{month}",
                                  "yyyyddMM",
                                  CultureInfo.InvariantCulture);