Разбор строки в соответствии с определённым паттерном
По сути я имею ввиду "обратное действие" к методу 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
Само собой это решение не на все случаи жизни, но его можно развивать. Я остановился на возврате массива строк. При необходимости каждое значение можно распарсить в нужный формат.