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

时间:2014-10-16 17:31:57

标签: c# regex

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

这就是字符串的样子:

sdfsad [2014年10月16日上午9:52 by AJOHNSON] sdfsadf

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

这是我到目前为止的正则表达式:

[0-9]。 [/] [0-9]。 [0-9]。* [在]

2 个答案:

答案 0 :(得分:2)

如果您的所有行都采用此格式:

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

然后我建议使用正则表达式从[by之前的空格中抓取所有内容,然后将该字符串传递给DateTime.ParseExactDateTime.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:]+).*\]

找到被捕获的群组datetime,然后将ParseExact找到正确的日期时间