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 вы можете
- ищи
^[^#]+
сопоставить содержимое первого поля; - ищи
(?<=#)[^#]+(?=#[^#]*#[^#]*$)
сопоставить содержимое второго поля; - ищи
(?<=#)[^#]+(?=#[^#]+$)
сопоставить содержимое третьего поля; - наконец, поиск
(?<=#)[^#]+$
чтобы соответствовать содержимому четвертого поля.
Это полагается на все строки, имеющие ровно четыре поля (и, таким образом, 3 #
), и будет соответствовать только тексту между двумя #
маркеры. Вот изображение, показывающее результат с этими четырьмя, примененными как стили 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