Действительно, проще всего было бы использовать регулярные выражения, например:
var template = "Hello, {0}!";
var test = "Hello, World!";
var pattern = Regex.Replace("^"+Regex.Escape(template)+"$", "\\\\{[0-9]+\\}", ".*?");
var matches = Regex.IsMatch(test, pattern); // true if test matches template
Идея в том, что вы хотите «преобразовать» шаблон в регулярное выражение, подставляя шаблон .*?
для каждого вхождения {n}
, а также заключая результат в ^
и $
, чтобы он соответствует в целом.
Но для этого вам нужно сначала Regex.Escape
template
, потому что в общем случае он может содержать символы, которые имеют особое значение в регулярных выражениях. Экранирование оставляет шаблоны типа {n}
, выглядящие как \{n}
, поэтому мы нацеливаемся на это, используя выражение \\\\{[0-9]+\\}
в "replace {n} with. *?" часть.