C# 占位符(mmddyyyy)的正则表达式,无特定顺序

C# 占位符(mmddyyyy)的正则表达式,无特定顺序,c#,.net,regex,formatting,C#,.net,Regex,Formatting,我有一个如下的字符串:myFile{ddmmyyyy}.csv和一个C#DateTime对象。我需要将DateTime中正确的日/月/年替换为字符串。然而,问题在于参数的顺序可能不同,而且并非所有参数都存在 e、 g.所有这些都是有效的用例: myFile{ddmmyyyy}.csv myFile{mmddyyyy}.csv myFile{mmyyyy}.csv 我的文件{yyyymm}.csv 如有任何关于正则表达式的建议/想法,我将不胜感激 编辑:为了清楚起见,我得到的实际字符串中有“m

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

e、 g.所有这些都是有效的用例:

  • myFile{ddmmyyyy}.csv
  • myFile{mmddyyyy}.csv
  • myFile{mmyyyy}.csv
  • 我的文件{yyyymm}.csv
如有任何关于正则表达式的建议/想法,我将不胜感激


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

您是否可以使用\w+\d+.csv?

只需匹配即可

@"myFile\d{8}.csv"
并使用或解析它(使用接受格式数组的重载)

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

更新

不使用正则表达式也可以执行此操作:

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

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

您确定需要正则表达式而不是
string.Format()
?string.Format()不够,因为我会收到一个像“myFile{ddmmyyyy}.csv”这样的文本字符串和一个DateTime,并且需要结果像“myFile22102013.csv”,但是我事先不知道mmddyyyy的顺序是什么,甚至不知道它们中是否有任何一个会出现。我不确定上面的操作方式,因为我收到一个像“myFile{ddmmyyyyy}.csv”这样的文本字符串以及一个日期时间,并且需要结果看起来像“myFile22102013.csv”,正如我上面的评论所示,但实际的参数顺序/编号在{}不同?不,不幸的是没有-这对我的需要来说太宽了一点。
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);
}