Имя: Пароль:
1C
1С v8
Разложить строку в массив подстрок с помощью регулярных выражений в частном случае.
,
0 Андроны едут
 
21.12.20
12:22
Собственно требуется получить из строки типа АналитикаУчетаПоПартиям текст "Аналитика учета по партиям".
То есть разделителем слов является заглавная буква.
Как это сделать регулярными выражениями?
1 yzimin
 
21.12.20
12:44
Почитай в СП КодСимвола (CharCode)
2 polosov
 
21.12.20
12:55
"[А-ЯЁ]{1}[а-яё]*"
IgnoreCase = Ложь;
3 ДенисЧ
 
21.12.20
12:56
Аналитика.Наименование == "Батон "Московский";новый";

Как разбирать по буквам будешь?
4 polosov
 
21.12.20
12:58
(3) Да ему верблюжью нотацию надо преобразовать.
5 Timon1405
 
21.12.20
14:14
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Ложь; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим
RegExp.Pattern = "([^^])([А-ЯЁ]+)";
Вход = "АналитикаУчетаПоПартиям";
Выход = Нрег(RegExp.Replace(Вход,"$1 $2"));
Выход = Врег(Лев(Выход,1))+Сред(Выход,2);
6 TormozIT
 
гуру
21.12.20
14:35
(5) Такую строку "Аналитика23УчетаРФПоПартиям" неверно переварит.
7 polosov
 
21.12.20
14:37
(6) В начальном ТЗ такого не было.
8 Timon1405
 
21.12.20
14:49
(6) разделило-то оно аналогично платформе, как если завести реквизит в обработке и нажать таб чтобы появился синоним. но тема обыграть много заглавных подряд интересная.
9 TormozIT
 
гуру
21.12.20
14:53
(8) Платформа красивее переваривает, чем (5)
платформа - Аналитика23 учета РФПо партиям
(5)       - Аналитика23 учета рфпо партиям
ирОбщий.ПолучитьПредставлениеИзИдентификатораЛкс(вход)  - Аналитика 23 учета РФ по партиям

Функция ПолучитьПредставлениеИзИдентификатораЛкс(ИсходнаяСтрока) Экспорт

    СтрокаВозврата = Сред(ИсходнаяСтрока, 1, 1);
    Для Сч = 2 По СтрДлина(ИсходнаяСтрока) Цикл
        ПредыдущийСимвол = Сред(ИсходнаяСтрока, Сч - 1, 1);
        ТекущийСимвол = Сред(ИсходнаяСтрока, Сч, 1);
        СледующийСимвол = Сред(ИсходнаяСтрока, Сч + 1, 1);
        ПослеследующийСимвол = Сред(ИсходнаяСтрока, Сч + 2, 1);
        Если ТекущийСимвол = "_" Тогда
            СтрокаВозврата = СтрокаВозврата + " ";
            Продолжить;
        ИначеЕсли Истина
            И ВРЕГ(ТекущийСимвол) = ТекущийСимвол
            // В идентификаторе не должны встречаться пробелы. Поэтому было решено закомментировать следующую строку.
            //И ПредыдущийСимвол <> " "
        Тогда
            Если Ложь
                ИЛИ ВРЕГ(ПредыдущийСимвол) <> ПредыдущийСимвол
                ИЛИ (Истина
                    И ПредыдущийСимвол <> "_"
                    И ВРЕГ(ПредыдущийСимвол) = ПредыдущийСимвол
                    И ВРЕГ(СледующийСимвол) <> СледующийСимвол)
            Тогда
                СтрокаВозврата = СтрокаВозврата + " ";
                Если Ложь
                    ИЛИ ВРЕГ(СледующийСимвол) <> СледующийСимвол
                    ИЛИ ВРЕГ(ПослеследующийСимвол) <> ПослеследующийСимвол
                Тогда
                    ТекущийСимвол = НРЕГ(ТекущийСимвол);
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        СтрокаВозврата = СтрокаВозврата + ТекущийСимвол;
    КонецЦикла;
    Возврат СтрокаВозврата;

КонецФункции
10 TormozIT
 
гуру
21.12.20
14:55
Сложные случаи по крайней мере через VBScript реализацию RegExp думаю не получится красиво переварить.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс