如何使用正则表达式从字符串中解析出日期

本文关键字:日期 字符串 何使用 正则表达式 | 更新日期: 2023-09-27 18:26:51

我正试图使用正则表达式从字符串中解析出DateTime。我的问题是,我有一个字符串列表,需要按日期降序排列。我想找到一个正则表达式,它将从字符串中获取日期。他们看起来都很相似,但我不知道该怎么做。非常感谢大家的帮助。

这就是字符串的样子:

sdfsad[10/16/2014上午9:52 AJOHNSON]sdfsadf

我有一个列表,所有的格式都是相同的。

这是我迄今为止的正则表达式:

[0-9][/][0-9][0-9].*[at]

如何使用正则表达式从字符串中解析出日期

如果您的所有行都采用以下形式:

sdfsad[10/16/2014 at 9:52 AM by AJOHNSON]sdfsadf

然后,我建议使用正则表达式来获取从[by之前的空间的所有内容,然后将该字符串传递给DateTime.ParseExact或DateTime.TryParseExact。

提取该文本的正则表达式应该很简单,使用DateTime解析器获取日期和时间将比使用正则表达式更容易。

使用正则表达式提取您感兴趣的组件(日期和时间),从这些组件中创建日期时间,并根据日期时间对每一行进行排序。你可以使用一个临时数据类来帮助你创建你想要的结构

public class DataWithTimestamp
{
    public string line {get;set;}
    public DateTime stamp {get;set;}
    public DataWithTimestamp(string data)
    {
        stamp = regex.extract(pattern); // not the correct syntax, set it here
        line = data;
    } 
}

在你的代码中,把你的行改为类,在上排序

var allLines = File.ReadAllLines("file.txt");
var sortedLines = allLines
                      .Select(s => new DataWithTimestamp(s))
                      .OrderBy(data => data.stamp)
                      .Select(data => data.line);

编辑:这个正则表达式应该工作:

'[(?<date>['d'/]+) at (?<time>['d:]+).*']

找到猫泥组datetime,然后ParseExact将它们放入正确的DateTime