C# Regex.Replace-用于更正日期格式的模式
我正在尝试格式化用户输入的日期。 日期以以下格式提供:C# Regex.Replace-用于更正日期格式的模式,c#,regex,C#,Regex,我正在尝试格式化用户输入的日期。 日期以以下格式提供: d/M/yyyy(即:2012年1月1日,但也可能是2012年12月1日或2012年1月12日) 但是,我需要将它们转换为: 年月日(即:2012年1月1日) 我设法用非正则表达式的方式来实现它,如下所示: string date = "1/1/2012"; if (date.IndexOf("/") == 1) { date = "0" + date; } if (date
- d/M/yyyy(即:2012年1月1日,但也可能是2012年12月1日或2012年1月12日)
- 年月日(即:2012年1月1日)
string date = "1/1/2012";
if (date.IndexOf("/") == 1)
{
date = "0" + date;
}
if (date.Substring(4, 1) == "/")
{
date = date.Insert(3, "0");
}
我真的很想知道如何使用Regex.Replace,但是,因为它可能会更整洁
我厌倦了以下不同的变化:
string date = "1/1/2012"
date = Regex.Replace(date, @"\d{1}/", "0$&");
上述方法可行,但如果日期为2012年12月1日,则12个月中也会有102个。如果我在图案的开头加上^,第二个数字就不会改变。一开始我也尝试了[^ |/]组合,但也没有运气。因此,目前它是或。使用单词边界
\b
来匹配单词字符和非单词字符
date = Regex.Replace(date, @"\b\d/", "0$&");
或
如果您确定传入的格式,我将使用
DateTime.ParseExact
,然后使用.ToString()
重新格式化日期:
DateTime dt = DateTime.ParseExact(input, "d/M/yyyy", CultureInfo.CurrentCulture);
string reformatted = dt.ToString("dd/MM/yyyy");
我会使用不同格式的try-parse-你考虑过这个吗?我没有-我会研究它。然而,这个问题纯粹是为了找出如何使用Regex.Replace()来完成它,无论如何,谢谢。谢谢你,但我实际上想知道如何使用Regex.Replace()来完成它-尽管我肯定也会研究你的建议:)
DateTime dt = DateTime.ParseExact(input, "d/M/yyyy", CultureInfo.CurrentCulture);
string reformatted = dt.ToString("dd/MM/yyyy");