我试图使用正则表达式从字符串中解析出DateTime。我的问题是我有一个字符串列表,需要按日期降序排序。我想找到一个从字符串中获取日期的正则表达式。它们看起来都很相似,但我不知道该怎么做。非常感谢所有帮助。
这就是字符串的样子:
sdfsad [2014年10月16日上午9:52 by AJOHNSON] sdfsadf
我有一个列表,所有列表都具有相同的格式。
这是我到目前为止的正则表达式:
[0-9]。 [/] [0-9]。 [0-9]。* [在]
答案 0 :(得分:2)
如果您的所有行都采用此格式:
sdfsad[10/16/2014 at 9:52 AM by AJOHNSON]sdfsadf
然后我建议使用正则表达式从[
到by
之前的空格中抓取所有内容,然后将该字符串传递给DateTime.ParseExact或DateTime.TryParseExact。< / p>
提取该文本的正则表达式应该是直截了当的,使用DateTime
解析器获取日期和时间比使用正则表达式更容易。
答案 1 :(得分:1)
使用正则表达式提取您感兴趣的组件(日期和时间),从这些组件创建日期时间,并根据日期时间对每一行进行排序。您可以使用临时数据类来帮助您创建所需的结构
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
找到正确的日期时间