Основано на Замена кавычек на «ёлочки» в C# и PHP
Быстродействие на больших объёмах текста не проверял, так как замена кавычек требуется в основном в наименованиях контрагентов или номенклатуры, а они в 99% явно меньше 255 символов. Также не рассматривал упоротые случаи вида Общество с ограниченной ответственностью "Торговый дом "ООО Мокрохрен"".
// Функция заменяет в строке двойные кавычки " на кавычки-елочки «»
// Ported from http://aione.ru/zamena-kavyichek-yolochkami-v-csharp_i_php/
// Coded by Sergey aka Porutchik, 2013, http://forum.aeroion.ru/cat1.html
//
// Параметры
// ИсходныйТекст - Строка - входная строка
//
// Возвращаемое значение:
// Строка - строка с заменёнными кавычками
//
Функция ЗаменитьКавычкиНаЕлочки(Знач ИсходныйТекст) Экспорт
Если Не ЗначениеЗаполнено(ИсходныйТекст) Тогда
Возврат ИсходныйТекст;
КонецЕсли;
ДвойнаяКавычка = """";
КоличествоКавычек = СтрЧислоВхождений(ИсходныйТекст, ДвойнаяКавычка);
// Если количество кавычек меньше двух, ничего не делаем, так как нет смысла закрывать/открывать
Если КоличествоКавычек < 2 Тогда
Возврат ИсходныйТекст;
КонецЕсли;
ЛеваяКавычка = "«";
ПраваяКавычка = "»";
БуквыИЦифры = "0123456789ABCDEFGHIKLMNJOPQRSTUVWXYZ";
БуквыИЦифры = БуквыИЦифры + "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
Результат = "";
ПозицияКавычки = Найти(ИсходныйТекст, ДвойнаяКавычка);
Пока ПозицияКавычки > 0 Цикл
Если ПозицияКавычки = СтрДлина(ИсходныйТекст) Тогда
// Если конец строки заканчивается кавычкой
ИсходныйТекст = Лев(ИсходныйТекст, ПозицияКавычки - 1) + ПраваяКавычка; //
Иначе
// Если впереди кавычки идут буквы и цифры, - ставим открывающую "«"
// Если любые другие символы, - ставим закрывающую "»"
СледующийСимвол = ВРег(Сред(ИсходныйТекст, ПозицияКавычки + 1, 1));
СтрокаЗамены = ?((Найти(БуквыИЦифры, СледующийСимвол) > 0) Или (ПозицияКавычки = 1), ЛеваяКавычка, ПраваяКавычка); //
ИсходныйТекст = Лев(ИсходныйТекст, ПозицияКавычки - 1) + СтрокаЗамены + Сред(ИсходныйТекст, ПозицияКавычки + 1); //
КонецЕсли;
// Если количество кавычек после последней замены осталось меньше двух, ничего не делаем, так как нет смысла закрывать/открывать
КоличествоКавычек = СтрЧислоВхождений(ИсходныйТекст, ДвойнаяКавычка);
Если СтрокаЗамены = ПраваяКавычка И КоличествоКавычек < 2 Тогда
ПозицияКавычки = 0;
Иначе
ПозицияКавычки = Найти(ИсходныйТекст, ДвойнаяКавычка);
КонецЕсли;
КонецЦикла;
Возврат ИсходныйТекст;
КонецФункции // ЗаменитьКавычкиНаЕлочки()
В очередной раз пожалел, что в 1С: Предприятии нет штатных возможностей регулярных выражений для замены текста. Использование COMОбъект VBScript.RegExp к ним не относится.