在C#中查找日期和更改格式

时间:2017-03-07 19:06:57

标签: c# regex date

我有一个包含不同数据的文本文件。现在我需要替换文件中的多个内容,然后才能正确使用数据。我用Regex替换了文本。但现在我需要改变日期。但我无法弄清楚如何做到这一点。

日期如下所示:"utc": "2017-10-02 19:55:00.205263000 Z" 我想得到这个日期格式的所有出现的结果: "utc": "2017-10-02 19:55:00"

我尝试使用以下代码:

string pattern = @"{0:yyyy-mm-dd hh:mm:ss.fff Z}";
string replacement = "{0:yyyy-mm-dd hh:mm:ss";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(theInputTextFile, replacement);

是否无法将日期格式与正则表达式一起使用。或者我在代码中犯了错误?

I used the information from here, for the date formats

2 个答案:

答案 0 :(得分:4)

实际上,您可以为Regex.Replace方法提供委托,以便您可以转换其格式。 检查此页面中的示例: https://msdn.microsoft.com/en-us/library/cft8645c(v=vs.110).aspx

下面是一个代码示例,它会找到按照您在问题中编写的格式化日期并替换为新格式:

class Program
{
    static void Main()
    {
        string text = " dasd arew 2017-03-11 12:25:56.345 Z 2017-03-11 12:25:56.345 Z das tfgwe 2017-03-11 12:25:56.345 Z";
        string pattern = @"\d{4}\-\d{2}\-\d{2}\s\d{2}\:\d{2}\:\d{2}\.\d{3}\sZ";
        Regex r = new Regex(pattern);
        var res = r.Replace(text, new MatchEvaluator(ConvertDateFormat));
        Console.WriteLine(res);
    }

    static string ConvertDateFormat(Match m)
    {
        var mydate = DateTime.Parse(m.Value);
        return mydate.ToString("yyyy-MM-dd hh:mm:ss");
    }

}

答案 1 :(得分:0)

  

是否无法将日期格式与正则表达式一起使用

正确。这不可能。正则表达式和日期格式/解析标记是两个不相关的概念。您需要匹配特定文本。日期解析器的内部可能使用正则表达式来实现这样的目标,但是人们不能简单地将yyyy传递给Regex类并期望它找到2017。你必须使用类似\d{4}之类的东西,它会捕获任意四个连续的数字。

另请注意,日期格式令牌区分大小写,并且您将分钟(mm)与月份(MM)混为一谈,并使用12小时制(hh )而不是24小时(HH)而没有上午/下午指标(tt) - 不管怎么说,因为你进入了一个正则表达式,所以无论如何这都很重要。