Regex.Replace - 用于更正日期格式的模式

时间:2015-02-06 14:13:01

标签: c# regex

我正在尝试格式化用户输入的日期。 日期以下列格式提供:

  • d / M / yyyy(即:2012年1月1日,但也可能是12/1/2012或2012年1月12日)

然而我需要将它们转换为:

  • dd / MM / yyyy(即:01/01/2012)

我设法以非正则表达方式进行,如下所示:

    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个。如果我在模式的开头添加^,则不会更改第二个数字。我也在开始尝试与[^ | /]的组合,但也没有运气。所以目前它是或者。

2 个答案:

答案 0 :(得分:1)

使用在单词字符和非单词字符之间匹配的单词边界\b

date = Regex.Replace(date, @"\b\d/", "0$&");

OR

date = Regex.Replace(date, @"\b(\d)/", "0$1/");

DEMO

答案 1 :(得分:1)

如果您确定传入格式,请改用DateTime.ParseExact,然后使用.ToString()重新格式化日期:

DateTime dt = DateTime.ParseExact(input, "d/M/yyyy", CultureInfo.CurrentCulture);

string reformatted = dt.ToString("dd/MM/yyyy");