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