Когда ваш объект user
выходит из области видимости, он разрушается. Его члены уничтожаются, включая член indestructible
, и это невозможно, поскольку его деструктор удален.
Причина, почему № 1 медленнее, является этим [\d;] + жадный квантор. Используя +? или *? движение должно сделать ленивый quantifing. См. MSDN - Кванторы для большего количества информации
, можно хотеть попробовать:
"(\e\[(\d{1,2};)*?[mz]?)?"
, Который может быть быстрее для Вас.
Вы действительно хотите сделать выполненный regexp дважды? Не проверив (плохо меня) я думал бы, что это будет работать хорошо:
public static string StripStringFormating(string formattedString)
{
return rTest.Replace(formattedString, string.Empty);
}
, Если это делает, необходимо видеть, что он выполняет ~twice как быстро...
Я не уверен, поможет ли это с тем, что Вы продолжаете работать, но давно я записал регулярное выражение для парсинга графических файлов ANSI.
(?s)(?:\e\[(?:(\d+);?)*([A-Za-z])(.*?))(?=\e\[|\z)
Это возвратит каждый код и текст, связанный с ним.
Входная строка:
<ESC>[1;32mThis is bright green.<ESC>[0m This is the default color.
Результаты:
[ [1, 32], m, This is bright green.]
[0, m, This is the default color.]
Не делая подробного анализа, я предположил бы, что это быстрее из-за вопросительных знаков. Они позволяют регулярному выражению быть "ленивым", и остановка, как только у них есть достаточно, чтобы соответствовать, вместо того, чтобы проверить, соответствует ли остальная часть входа.
я не совсем доволен этим ответом, хотя, потому что это главным образом относится к вопросительным знакам после * или +. Если бы я был более знаком с входом, то он мог бы иметь больше смысла мне.
(Кроме того, для форматирования кода, можно выбрать весь код и нажатие Ctrl + K , чтобы иметь его, добавляют четыре требуемые пробелов.)