Помогите добавить слово во все столбцы

Автор Partizanzero, 23 июля 2015, 14:45

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

Partizanzero

Здравствуйте.

Подскажите как можно добавить одно и тоже слово во все столбцы перед уже имеющимся там текстом?

Например, есть столбцы:
Иванов
Петров
Сидоров
....

необходимо перед фамилиями во все столбы добавить одно и тоже слово, например "слесарь", чтобы в итоге получилось:
слесарь Иванов
слесарь Петров
слесарь Сидоров
...

Спасибо за внимание. Очень надеюсь на помощь.
Сижу в окопе, жду медалей.

rami

#1
Цитата: Partizanzero от 23 июля 2015, 12:45необходимо перед фамилиями во все столбы добавить одно и тоже слово, например "слесарь"
С помощью "Найти и заменить" выделить нужные ячейки и установить "птички" "Регулярное выражение" и "Только текущее выделение" — чтоб не все стали слесарями, а только избранные ;D
В поле Найти: ^.* — крышечка, точка, звёздочка
В поле Заменить на слесарь & — слесарь, пробел, &

Partizanzero

Спасибо большое, rami. Все получилось )
Сижу в окопе, жду медалей.

W1nterdreams

Если не сложно, есть ли возможность добавить так же, но в конце ячеек?

eeigor

#4
Ну, так символ & – это то, что нашлось (а в примере выше нашлось всё, то есть вся строка) + новый текст в заданной позиции. Варьируйте порядком следования всего этого в поле «Заменить на». Можно разбивать поиск на части, создавая группы, которые потом можно перебирать в произвольном порядке, выбрасывая лишнее и добавляя новое, используя специальный синтаксис ($n, где n – порядковый номер группы, а группа – это тот фрагмент текста, который в шаблоне поиска был заключён в круглые скобки). Например: был Иван Иванович Иванов, а заменили на Иванов И.И., поставив фамилию вперёд. Если заинтересовало, то об этом стоит почитать дополнительно.

UPD:
Поясню вышесказанное на примере.

Текст в ячейке: Иван Иванович Иванов

Найти: (.)(?:.*) (.)(?:.*) (.*)
Заменить на: $3 $1.$2.

Новый текст в ячейке: Иванов И.И.

Комментарий.
(.)  - любой символ, группа 1 (то, что в скобках: инициал имени)
(?:.*)  - остаток имени, символы ?: говорят о том, что группу создавать не надо; это влияет на индексацию, т.е. на порядковые номера других групп
  - пробел, для наглядности вместо пробела можно использовать символы (от space - пробел): \s
Далее следует такая же последовательность для отчества
И наконец, последняя группа:
(.*)  - фамилия

Символ * - это квантификатор, или квантор (показывает, сколько раз предшествующий символ может повторяться, в данном случае: сколь угодно много или может совсем отсутствовать)

Итого, создано 3 группы: (.) инициал имени, (.) инициал отчества, (.*) фамилия. Количество пробелов фиксировано.
Обращение к группам при замене производится по индексу группы, предваряя номер символом $, точки и пробелы расставляем самостоятельно.

Так тоже работает (без выделения групп, которые по тексту выше создавать не надо):
Найти: (.).* (.).* (.*)
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#5
Я сам знакомлюсь с возможностями regex в Calc'е (или в LibreOffice, точнее).
Очень неплохо.
Работают:
комментарии (?# ... )
заглядывание вперёд - Look-ahead (?= ... )
заглядывание вперёд с отрицанием - Negative look-ahead (?! ... )
заглядывание назад - Look-behind (?<= ... )
заглядывание назад с отрицанием - Negative look-behind (?<! ... )
обратные ссылки по имени - Named Capture Back Reference \k<name>
замена текста по имени группы (см. предыдущий пункт) ${name}

В Excel, к примеру, при подключении внешней библиотеки VBScript.RegExp <look-behind assertions> работать не будут.

UPD1:
Проверил работу нежадных (non-greedy) алгоритмов: "*?", "+?", "??", {n,m}?
Функция REGEX находит текст правильно, но символы замены (третий аргумент функции) не воспринимаются, а в окне "Найти и заменить" поиск работает, но с заменой не всё понятно. Это, вроде, не соответствует спецификации, приведённой по ссылке ниже.

UPD2:
Проверил работу атомарной группировки (?> ... ) в соответствии со спецификацией. Пример взят отсюда.
Функция REGEX находит текст правильно (атомарная группировка работает, зд. Excel "отдыхает"), но с заменой та же беда: специальные символы не воспринимаются. Поиск в окне "Найти и заменить" осуществляется верно. Возможно, я что-то делаю не так.

UPD3:
Проверил работу опции "Case insensitive".  Это хороший способ выполнить поиск без учёта регистра символов (-i  делает поиск того, что в скобках, регистронезависимым):
(?-i: ... )
По умолчанию поиск является регистрозависимым, и соответствующий флажок на вкладке "Вычисления" не оказывает влияния на работу этой функции. Так ли это?

UPD4:
Флаг (?s) - DOTALL - тоже работает, и может быть полезен. Поясню: включаем флаг, и в многострочном блоке текста вместо  .*\n  достаточно задать  .*

В целом, регулярные выражения - мощный инструмент, и  здесь они поддерживаются весьма основательно. Этого достаточно. Есть некоторые неполадки с заменой результатов поиска, полученных несколько усложнённым синтаксисом (см. выше).

UPD5:
И замена работает тоже. Однако ко всей найденной строке надо обращаться через  $0  или через номер группы, вариант через  &  не работает.

Все возможности вот тут. Но информации (примеров использования) явно недостаточно.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community