我有一个包含不同数据的文本文件。现在我需要替换文件中的多个内容,然后才能正确使用数据。我用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);
是否无法将日期格式与正则表达式一起使用。或者我在代码中犯了错误?
答案 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
) - 不管怎么说,因为你进入了一个正则表达式,所以无论如何这都很重要。