Множественная замена разнородного текста функциями.

Автор TanaTiX, 25 марта 2022, 18:26

0 Пользователи и 1 гость просматривают эту тему.

TanaTiX

Есть текст. К примеру такого вида:
Цитироватьааа_1_ббб_2__3_ваппав_7_нн44ннн
И есть колонка с набором произвольных значений.
Возможно ли за (и если да, то в какую сторону двигаться?) один "проход" заменить все _:digit:_ (тут я предположил использование регулярных выражений) заменить на значения нужных строк указанной колонки?
Можно было бы сделать это с помощью "вложенности" замены и регулярных выражений друг в друга, но количество совпадений не известно - от 0, до, к примеру, 100. Делать 100 вложений - не хороший подход.
Написание макроса - на данный момент является нежелательным, хотелось бы именно функциями.
Заранее спасибо.

eeigor

#1
Вам не надо знать количество совпадений: параметр "g" (global) функции REGEX заменит все.
Из вашего описания следует, что вы хотите заменить все цифры одинаковым текстовым значением. Для этого достаточно одного вызова.

Или что понимается под "значениями нужных строк указанной колонки?"
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

TanaTiX

Не одинаковым, а разными. Для цифры 1 - из 1го ряда, для 2 - из 2го, из 7 - из 7-го и т.д.

eeigor

#3
А что значит "количество совпадений неизвестно"?

Edit:
если критерии замены разные, то 100 замен – это сто вызовов.

Я пока не знаю, можно ли сделать строку замены вычисляемой всякий раз? Думаю, что нет: regex выражение будет откомпилировано, и строка замены будет вычислена один раз. Значит, нужен цикл (макрос).

А если вместо строки замены подать весь массив значений, а вызов функции сделать формулой массива – это даст что-то?
Тоже нет, потому что после каждого вызова надо работать с уже модифицированной строкой.

Вариант с циклическими ссылками не рассматривал (когда исходный текст ссылается на ячейку, ссылающуюся на модифицированный функцией текст.

P.S. Без компьютера
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

TanaTiX

Значит не получается (((
Я предполагал. Жаль (((

eeigor

Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

mikekaganski

Цитата: TanaTiX от 25 марта 2022, 18:26количество совпадений не известно - от 0, до, к примеру, 100.
Цитата: TanaTiX от 25 марта 2022, 18:50Для цифры 1 - из 1го ряда, для 2 - из 2го, из 7 - из 7-го и т.д.
Я не понял. Цифр (тех, которые :digit:) десять. Понятно, что количество вхождений каждой цифры может быть большим, но из "примера" вообще ничего не ясно. Если нет нормального примера - "вот файл; в нём штук десять примерных исходных строк, вот "нужные строки указанной колонки", вот что я хочу получить на выходе" - это просто разговор ни о чём.
С уважением,
Михаил Каганский

economist

#7
Если ТС хочет непременно формулы, есть готовый кросс-платформенный вариант из 50 готовых строковых методов: изм. регистра, поиск, реверс, транслит, разбивка, партицирование итд. Расширение и примеры тут:  

https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=83856&p=389632

Питон эффективно (т.е. быстро и просто) работает со строками и регулярными выражениями, модуль написан на языке С. Быстрее только строковые методы из другого модуля, Numpy с легендарным Fortran под капотом, который умеет векторизовать наборы данных (т.е. он работает по целым столбцам таблицы, без циклов и итераций, за счет рекурсии, в парадигме функционального программирования).
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...