| 
    
            
         
         | 
    
  | 
Разложить строку в массив подстрок с помощью регулярных выражений в частном случае. | ☑ | ||
|---|---|---|---|---|
| 
    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 думаю не получится красиво переварить.     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |