我正在尝试格式化用户输入的日期。 日期以下列格式提供:
然而我需要将它们转换为:
我设法以非正则表达方式进行,如下所示:
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$&");
上述方法可行,但如果日期为12/1/2012,则12个中也会有102个。如果我在模式的开头添加^,则不会更改第二个数字。我也在开始尝试与[^ | /]的组合,但也没有运气。所以目前它是或者。
答案 0 :(得分:1)
使用在单词字符和非单词字符之间匹配的单词边界\b
。
date = Regex.Replace(date, @"\b\d/", "0$&");
OR
date = Regex.Replace(date, @"\b(\d)/", "0$1/");
答案 1 :(得分:1)
如果您确定传入格式,请改用DateTime.ParseExact
,然后使用.ToString()
重新格式化日期:
DateTime dt = DateTime.ParseExact(input, "d/M/yyyy", CultureInfo.CurrentCulture);
string reformatted = dt.ToString("dd/MM/yyyy");