占位符 (mmddyyyy) 的正则表达式,没有特定的顺序

本文关键字:顺序 正则表达式 mmddyyyy 占位符 | 更新日期: 2023-09-27 18:36:31

我有一个看起来像这样的字符串:myFile{ddmmyyyy}.csv和一个C# DateTime对象。我需要将日期时间中的正确日/月/年替换为字符串。然而,问题在于参数可以处于不同的顺序,并且并非所有参数都存在。

例如,所有这些都是有效的用例:

  • myFile{ddmmyyyy}.csv
  • myFile{mmddyyyy}.csv
  • myFile{mmyyyy}.csv
  • myFile{yyyymm}.csv

关于正则表达式的任何建议/想法,我可以用来查找/替换这些,将不胜感激!

编辑:为了清楚起见,我得到了包含"mmddyy"的实际字符串(字符,而不是相应的数字),其中"mm"需要替换为月份数字(例如,10 代表十月)用于收到的日期时间。

占位符 (mmddyyyy) 的正则表达式,没有特定的顺序

private static string FormatFilename(string pattern, DateTime dt)
{
    return Regex.Replace(pattern, @"'{(.*)'}", match =>
    {
        string format = match.Result("$1").Replace("m", "M");
        return dt.ToString(format, CultureInfo.InvariantCulture);
    });
}

然后像这样称呼它(例如):

string input = "myFile{ddmmyyyy}.csv";
DateTime dt = new DateTime(2013, 1, 4);
string filename = FormatFilename(input, dt);

更新

可以在没有正则表达式的情况下执行此操作:

private static string FormatFilename(string pattern, DateTime dt)
{
    return string.Format(pattern.Replace("{", "{0:").Replace("mm", "MM"), dt);
}

但我认为另一个版本更干净,对输入变化更具弹性。

''

w+''d+.csv对你有用吗?

只是匹配

@"myFile'd{8}.csv"

并使用DateTime.ParseExactDateTime.TryParseExact来解析它(使用接受格式数组的重载)