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

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


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


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

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

最佳答案

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


但我认为其他版本更干净,对输入变化也更具弹性。

关于c# - 占位符(mmddyyyy)的RegEx,无特定顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19528904/

10-09 05:41