正则表达式用于条件替换以在日期中添加前导零

时间:2018-10-16 19:04:02

标签: c# regex

我有一个日期列表,例如:

14/09/2019 - dd/mm/yyyy
1/10/2018 - m/dd/yyyy
1/2/2018 - d/m/yyyy

我想将所有这些日期转换为dd/mm/yyy的可接受格式。

我只想在这里使用REGEX。另外,我认为我需要在此处替换条件正则表达式。

伪代码如下:

  1. 如果日期为1/10/2018,则将其格式化为01/10/2018
  2. 如果日期为1/2/2018,则将其格式化为01/02/2018

对不起,但是我没有任何代码可以证明这一点。我对此感到困惑。

2 个答案:

答案 0 :(得分:1)

您可以使用此方法逐一检查日期格式

string convertDateToAcceptedFormat(string inputDate)
{
    Regex patternDDMMYYYY = new Regex(@"^(\d\d\/){2}\d{4}$");
    if (patternDDMMYYYY.Match(inputDate).Success)
        return inputDate;

    Regex patternDMMYYYY = new Regex(@"^\d\/\d\d\/\d{4}$");
    if (patternDMMYYYY.Match(inputDate).Success)
        return "0" + inputDate;

    Regex patternDMYYYY = new Regex(@"^(\d\/){2}\d{4}$");
    if (patternDMYYYY.Match(inputDate).Success)
        return "0" + inputDate.Substring(0,2) + "0" + inputDate.Substring(2);

    throw new Exception("Input date doesn't match any pattern");
}

答案 1 :(得分:0)

使用C#的正则表达式替换match evaluator,这是每次匹配发生时运行的委托操作。

为此,每次匹配时,将找到的内容转换为所需的格式:

var text = @"1/2/2018";

Regex.Replace(text,
              @"\d?\d/\d?\d/\d\d\d\d",
              new MatchEvaluator((mtch) => 
                         DateTime.Parse(mtch.Groups[0].Value).ToString("MM/dd/yyyy")));

替换返回该字符串"01/02/2018";


请注意,我只处理一种情况,可以扩展上述委托以读取当前比赛并确定所需的返回格式。