|
Разложить строку в массив подстрок с помощью регулярных выражений в частном случае. |
☑ |
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 думаю не получится красиво переварить.
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший