InDesign GREP найти между

В поиске InDesign GREP я пытаюсь получить части текстового поля, которое было заполнено CSV (файл с использованием # как разделитель). Причина, по которой я хочу использовать разные части, заключается в том, чтобы придать каждому свой стиль персонажа.

Содержимое Textfield выглядит следующим образом:

Alpha#60x50cm#Acryl
Beta#2013#50x40cm#Öl
Gamma#2013#50x40cm#Holz
…

С помощью

^[^#]+

будет работать нормально, чтобы получить первую часть каждой строки (которая ограничена первым хэштегом)

Как будет выглядеть шаблон Grep:

  • все между хэштегом 1 и 2,
  • все между хэштегом 2 и 3,
  • все после хэштега 3?

В каждой строке.

2 ответа

Решение

В интерфейсе InDesign вы можете

  1. ищи ^[^#]+ сопоставить содержимое первого поля;
  2. ищи (?<=#)[^#]+(?=#[^#]*#[^#]*$) сопоставить содержимое второго поля;
  3. ищи (?<=#)[^#]+(?=#[^#]+$) сопоставить содержимое третьего поля;
  4. наконец, поиск (?<=#)[^#]+$ чтобы соответствовать содержимому четвертого поля.

Это полагается на все строки, имеющие ровно четыре поля (и, таким образом, 3 #), и будет соответствовать только тексту между двумя # маркеры. Вот изображение, показывающее результат с этими четырьмя, примененными как стили GREP:

grep стили для выделения полей

Как видите, применяемые атрибуты нигде не перекрываются, поэтому все отмечается только один раз.

Другой способ - использовать Javascript. Все линии можно разбить на # символ (команда называется split), и это возвращает массив текста между ними. Однако это преобразует текст в простую строку Javascript, и для перевода результата "назад" в форматированный текст требуется некоторая хитрость.

Вам нужно использовать -P параметр с grep.

$ grep -oP '(?<=#)[^#]*(?=#|$)' file
,2013
60x50cm
Acryl
2013
50x40cm
Öl
2013
50x40cm
Holz

Чтобы изменить вывод вышеуказанной команды в виде трех столбцов в строке.

$ grep -oP '(?<=#)[^#]*(?=#|$)' file | paste - - -
,2013   60x50cm Acryl
2013    50x40cm Öl
2013    50x40cm Holz
Другие вопросы по тегам