using System.Text.RegularExpressions;
public static void Main()
string test = ReplaceDateMath("__DATEMATH(now-1M/M)__");
string test2 = ReplaceDateMath("__DATEMATH(now-1M/M):o__");
Console.WriteLine(test2);
string test3 = ReplaceDateMath("__TODAY:F__");
Console.WriteLine(test3);
string test4 = ReplaceDateMath("__TODAY__");
Console.WriteLine(test4);
string test5 = ReplaceDateMath("someurl");
Console.WriteLine(test5);
string test6 = ReplaceDateMath("someurl with __TODAY:F__");
Console.WriteLine(test6);
public static string ReplaceDateMath(string input)
if (input == "__THISYEAR__")
return DateTime.UtcNow.Year.ToString();
string dateMathPattern = "__DATEMATH\\((.+?)\\):{0,1}(.*?)__";
string todayPattern = "__TODAY:{0,1}(.*?)__";
if (Regex.IsMatch(input, dateMathPattern))
var match = Regex.Match(input, dateMathPattern);
var dateMathExpression = match.Groups[1].Value;
var dateFormat = !string.IsNullOrEmpty(match.Groups[2].Value) ? match.Groups[2].Value : "yyyyMMdd";
if (DateMath.TryParse(dateMathExpression, out date))
retVal = Regex.Replace(input, dateMathPattern, date.ToString(dateFormat));
else if (Regex.IsMatch(input, todayPattern))
var match = Regex.Match(input, todayPattern);
var dateFormat = !string.IsNullOrEmpty(match.Groups[1].Value) ? match.Groups[1].Value : "yyyyMMdd";
retVal = Regex.Replace(input, todayPattern, DateTime.UtcNow.ToString(dateFormat));