Вы, вероятно, должны использовать using
операторы вместо того, чтобы каждый раз выписывать пространство имен полностью. На первый взгляд ваш код выглядит довольно сложным, но когда вы удаляете все пространства имен, он оказывается очень простым. Также OfType
не требуется.
Регулярное выражение должно соответствовать как можно большему числу, которое не является открытой скобкой [^{]*
или открытой скобкой, текстом и затем закрывающей скобкой {[^}]*}
Регулярное выражение для этого:
{[^}]*}|[^{]*
Попробуйте этот код:
string text = "abcdef{123}ghi{456}kl";
Regex regex = new Regex("{[^}]*}|[^{]*");
foreach (Match match in regex.Matches(text))
{
Console.WriteLine(match.Value);
}
Выход:
abcdef
{123}
ghi
{456}
kl
Примечание: это регулярное выражение не проверяет правильность формата строки, а предполагает, что оно правильно сформировано.
Немного более простой метод - использовать Split вместо Matches и включить группу захвата в регулярное выражение, чтобы разделитель также был включен в вывод:
string text = "abcdef{123}ghi{456}kl";
Regex regex = new Regex("({[^}]*})");
foreach (string part in regex.Split(text))
{
Console.WriteLine(part);
}
Вывод для этого такой же, как указано выше.