如何使用正则表达式从字符串中解析出日期
本文关键字:日期 字符串 何使用 正则表达式 | 更新日期: 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:]+).*']
找到猫泥组date
和time
,然后ParseExact
将它们放入正确的DateTime