Имя: Пароль:
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 думаю не получится красиво переварить.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший