2

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

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

  • 我的文件{ddmmyyyy}.csv
  • 我的文件{mmddyyyy}.csv
  • 我的文件{mmyyyy}.csv
  • 我的文件{yyyymm}.csv

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

编辑:为了清楚起见,我得到了其中包含“mmddyyyy”的实际字符串(字符,而不是相应的数字),其中“mm”需要替换为 DateTime 的月份数(例如,10 代表 10 月)已收到。

4

3 回答 3

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

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

于 2013-10-22T22:34:02.423 回答
0

\w+\d+.csv 会为你工作吗?

于 2013-10-22T21:45:51.687 回答
0

只要匹配

@"myFile\d{8}.csv"

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

于 2013-10-22T21:46:17.693 回答