.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Globalization;	
using System.Text.RegularExpressions;
using System.Linq;
public class Program
{
	public static void Main()
	{
		string input = "log_{yyyy-MM} foo {HH}.txt";
		DateTime now = DateTime.Now;

		string[] results = Regex.Matches(input,@"\{.*?\}" ).Cast<Match>().Select(m => m.Value).ToArray(); 
		


		foreach(string result in results) {
			input = input.Replace(result,now.ToString(result));
		}
		

        Console.WriteLine(string.Format("log_{0} foo {1}.txt",now.ToString("yyyy-MM"),now.ToString("HH")));
	}
}
;