Разбор строки в соответствии с определённым паттерном

По сути я имею ввиду "обратное действие" к методу string.Format:

string format = "Number: {0}\nString: {1}\nBoolean: {2}\n";
string str = string.Format(format, 11, "example string", true);

Хотелось бы иметь что то вроде:

object[] values;
string.Extract(str, format, out values); // values: 11, "example string", true

Ответы (1 шт):

Автор решения: aepot

Под эту задачу хорошо подходят регулярные выражения.

public static class StringExtensions
{
    public static string[] Extract(this string text, string format)
    {
        string pattern = Regex.Replace(format, @"{\d+}", "(.+)");
        return Regex.Match(text, pattern).Groups.Cast<Group>().Skip(1).Select(x => x.Value).ToArray();
    }
}

Проверям

string text = "Number: 11\nString: example string\nBoolean: true\n";
string format = "Number: {0}\nString: {1}\nBoolean: {2}\n";
Console.WriteLine(string.Join(Environment.NewLine, text.Extract(format)));

Вывод в консоль

11
example string
true

Само собой это решение не на все случаи жизни, но его можно развивать. Я остановился на возврате массива строк. При необходимости каждое значение можно распарсить в нужный формат.

→ Ссылка