我有一个看起来像这样的字符串: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/