占位符 (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 代表十月)用于收到的日期时间。
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.ParseExact
或DateTime.TryParseExact
来解析它(使用接受格式数组的重载)