繁体   English   中英

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

[英]Regex for conditional replace to add leading zeros in a date

我有一个dd/mm/yyyy格式的日期列表,除了某些日期和月份只有一位数。 例如,

14/09/2019 - dd/mm/yyyy (correct)
1/10/2018 - d/mm/yyyy (should be 01/10/2018)
1/2/2018 - d/m/yyyy (should be 01/02/2018)

我想将所有这些日期转换为可接受的形式,即dd/mm/yyyy

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

伪代码如下:

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

抱歉,我没有任何代码来证明这一点。 我坚持这一点。

使用 C# 的正则表达式替换匹配评估器,这是一个委托操作,每次发生匹配时都会运行。

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

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"


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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM