Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Regex.Replace-用于更正日期格式的模式_C#_Regex - Fatal编程技术网

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");