Как использовать grep в индизайн
Большинство задач дизайнера так или иначе связаны с текстом. Потеребить типографику, создать многоколоночную верстку, позалипать на шрифты паратайпа, тайком от коллег использовать Lobster в баннере. Но у текста есть ещё одна, очень важная сторона, и отнюдь не эстетическая: разбор и глобальное редактирование больших объемов текста.
А зачем? Допустим, дизайнеру даются текстовые данные для внесения в 40 000 визиток. Редкий клиент даст оптимизированный текст. А так как работу надо сделать, придется самостоятельно обрабатывать полученные данные. Вот тут то и придут на выручку регулярные выражения. Основная и наиболее примитивная задача регулярных выражений — умный поиск текста. InDesign поддерживает регулярные выражения с версии CS3, а в скриптах под InDesign с версии CS2 через библиотеку Microsoft VBScript Regular Expressions vbscript.dll. В данной статье рассматривается синтаксис PCRE.
Регулярные выражения состоят из двух типов типов символов: метасимволы (функциональные кусочки, из которых вы клепаете код) и литералы (обычные символы). Если откинуть в сторону весь синтаксический сахар, то регулярные выражения умеют делать три вещи: повторение символа, определенный символ идет за другим символом, и условия ветвления.
Синтаксис, метасимволы:
\ превращает спец. символы в обычные и наоборот. Пример: /d/ ищет просто букву d. /a\*/ ищет a*. Так, \\ это просто слеш, а \\\\ это два слеша. Каждые два слеша преобразовываются в один, когда идет преобразование в обычный символ.
/ начало и конец рег. выражения из литералов в JS
. любой символ кроме перевода строки (на точку тоже работает). [A-Z].. выберет текст начиная с заглавной буквы и плюс два любых символа.
+ повторение предыдущего символа 1 и более раз
? опциональный символ. Повторение символа ноль или один раз, то есть в [mo?ther] не будет важно, есть ли в слове буква o или нет, в обоих случаях слово будет выбрано.
\d любая цифра. Эквивалентно 3.
\w любой словесный символ (буквы, цифры и _). Эквивалентно /[A-Za-z0-9_] /.
[] любой символ из указанных внутри конструкции. [d] найдёт все буковки d. /[A-Z]/ все большие английские буквы. /x[eaoy]n/ выберет Xen xan xon xyn. [XYZ]+ один или более символов из указанных в конструкции. [^xyz] любой символ кроме указанных в наборе. [Mm]a[ks]|[x]|[xs]im – выберет любое из имен maxsim, maksim, masim, Maxim, Maksim, maxim .
$ конец данных. /a$/ найдёт слово anna, но не найдёт ann. /^8+\.00$/ проверит, есть ли нули в конце или нет.
^ начало данных. ^man будет верным, если строка начинается с непрерывного набора букв m a n. А [^a-z] не строчная буква ^. /[^b]log/ выберет plog dlog flog но не blog, а ma[ksx]im
\s –найти все символы пробела
() отделяющие скобки, или группировка. (\d+).(\d+) – выбрать такого типа данные 1024, 768. (file.*)\.pdf$ -имя файл, потом любое кол-во символов, точка и формат. (?:<img.*?\/?>) найти изображение в тексте.
| или. I love (cats|dogs) – или или
от m до n повторений предыдущего символа. Неотъемлемая часть валидации всяких логинов и паролей, вроде /^[\w_]$/
\< и \> позиция в начале и конце слова соответственно.
И несколько базовых шаблонов, которые мне помогают писать регулярки:
/abc/ Идущие подряд символы abc
/[abc]/ Один из символов a, b или c
/[^abc]/ Ни один из символов, т. е. не а, не b и не c
/[a-z]/ Диапазон символов, идущих подряд в таблице Unicode
/\b/ Граница слова
/\B/ Не граница слова
/\d/ Цифра
/\D/ Не цифра
/\w/ Латинская буква, цифра или _
/\W/ Не латинская буква, не цифра и не _
/\s/ Пробельный символ
/\S/ Непробельный символ
/a< 3 >/ Строго 3 символа а подряд
/a< 2 , 4 >/ От 2 до 4 символов а подряд
/a+ / 1 и более символов а подряд
/ a* / 0 и более символов а подряд
/ a? / 0 или 1 символ а
/ ./ Один любой символ, кроме переноса строки
Есть дополнительные опции. А точнее, флаги. Лично мне они знакомы по языку MEL, т.к. очень активно в нем используются. G – глобальный поиск, заставит рег. выражения пройтись по всему контенту, i позволяет забыть про регистр, m – многострочный поиск. Если введенный текст при поиске не соответствует ни одному из метасимволов, то он считается обычным текстом. Флаг m вам придется использовать редко, а i и g достаточно частотные.
Существуют кванторы, они позволяют задать количество повторений для стоящего слева от них символа.
* 0 повторений или более раз
+ 1 или более раз
? 0 или 1 раз
точное количество раз (x)
от x до y раз
И группировка: то, что находится в круглых скобках, это подвыражение. К подвыражениям можно обращаться по индексу. А благодаря разделителю | можно использовать логические конструкции, выбирая либо одно выражение, либо иное.
«Это все замечательно, но мне нужно готовое решение!» — скажите вы. И правильно скажете, регулярные выражения сложно читать, писать и поддерживать. Но зачастую это единственный способ выполнить сложные манипуляции над текстом. В InDesign использовать регулярные выражения можно через Edit > Find/Change (Поиск и замена) в закладка GREP(регулярные выражения). Все просто, в верхнюю строчку вводите регулярное выражение, в нижнюю $0 (доступ ко всему найденному), и в опциях замены укажите необходимые настройки. Собственно, профит.
Вот пример с более сложной структурой:
У разных языков программирования разные диалекты регулярных выражений. Perl и PHP позволяют использовать рекурсивные регулярные выражения, флаги тоже не везде работают одинаково. Поэтому обязательно смотрите документацию. Посмотрим работу с регулярными выражениями на примере JavaScript. Самый примитивный пример это console.log(/java/.test(str)); , просто скопируйте и вставьте в консоль браузера. Ответ будет false либо true , в зависимости от содержания переменной str .
Задаем переменную:
const myrg = new RegExp('car') const myrg = /car/
Изучаем методы:
Test – проверяет, есть ли совпадения в выделенной строке;
Exec – поиск совпадений в строке и возвращаем массив в данными;
Sear– тестирует на совпадение в строке;
Matc – поиск совпадений и возврат массива данных;
Repl – поиск совпадений и замена на что либо;
Split – разбивает строки на массив подстрок;
Используем на чем-либо живом. Составим скриптик, который уберет слова cat.
var reg = /\b(?!cat\b)\w+/g; var strin = "my cat, you cat, world cat!"; myArray = strin.match(reg); document.write(myArray);
В синтаксисе JS и RegExp есть пересечение по использованию следующих символов: \ / [ ] ( ) < >? + * | . ^ $ . Если они используются для поиска совпадений в шаблоне, то нужно их экранировать с помощью символа обратного слеша.
Метод search . На примере следующего кода:
let str = "some text is always nice to have"; let regExp = new RegExp('nice'); console.log(str.search(regExp));
На выходе мы получим цифру 20. Это индекс вхождения найденного в строке. Если в данном случае мы добавим флаги let regExp = new RegExp('nice', 'igm'); то это никак не скажется на результате. Даже не смотря на g , на выходе мы получим не массив с индексами. Потому что метод search всегда возвращает только индекс первого совпадения. Следующий пример:
let str = "some text is always nice to have"; console.log(str.match(/to/));
Если совпадений не будет, то вернется null . Но если совпадения есть, то мы получаем массив. match можно подсчитать кол-во вхождений. Для замены используется следующая конструкция: console.log("+971-532-122-111".replaceAll('-','_')); .
Если нужно поменять слова местами, вот пример решения:
let name = "Katia, Aliana"; console.log(name.replace(/([a-z]+), ([a-z]+)/i, '$2 $1'));
Еще одна важная часть регулярок это квантификаторы. В сокращенном виде бывают следующими:
- + отвечает за бесконечное кол-во вхождений, начиная с 1
- * от нуля до бесконечности
- ? про либо ничего, либо 1
Так, если мы хотим узнать, есть ли определенное слово в конце строки, есть лаконичное решение с использованием квантификаторов: console.log('cat is a cat'.match(/cat$/i));
И самое приятное, регулярные выражения работают и в Google Analytics, Google Tag Manager и Яндекс Метрике. При настройках цели, при настройках расширенного фильтра в отчете, при создании пользовательских сегментов, при создании фильтров в представлении, и даже при использовании фильтров в запросах по API Google Analytics.
В общем, мы имеем не плохой рабоче-крестьянский язык программирования внутри языка программирования, который поможет вам освободить кучу времени, и потратить это время на шлифовку своих навыков. Больше автоматизации = больше свободного времени на шлифовку навыков по автоматизации!
В 2007 году версия Adobe InDesign CS3 приподнесла нам много приятных сюрпризов, в числе которых была поддержка регулярных выражений.
О регулярных выражениях.
Регулярные выражения (Regular Expression, или RegExp) имеют достаточно длинную историю (самые ранние практические применения еще в 70-х годах – в текстовом редакторе Ed в системе UNIX, более поздние – в Perl, Apache, PHP, InDesign ). Они особенно эффективны при выполнении поиска и замены.
В отличие от обычного поиска, где указывается конкретный текст, регулярные выражения позволяют обобщить условия поиска с помощью системы шаблонов. Шаблоны – это текстовые фрагменты, которые содержат как обычные символы, так и метасимволы, с помощью которых задаются специальные функции: альтернативные варианты поиска, условия повторений и пр. Понять, как работает система шаблонов вполне возможно, хотя иногда непросто, так как задачи бывают весьма заковыристые. Для полноценного описания работы шаблонов понадобится слишком много места, поэтому для всех интересующихся приведены ссылки в конце статьи. Здесь же мы разберём ряд задач, которые помогут понять работу системы шаблонов, а также пригодятся при работе с текстом в InDesign.
Для выполнения всех задач используется операция Edit > Find/Change (Поиск и замена) и закладка GREP(регулярные выражения).
Задача №1. Автоматическая расстановка переносов в текстах, содержащих и кириллицу, и латиницу.
Проблема заключается в том, что для работы системы переносов нужно в параметрах символов задать для кириллицы русский язык, а для латиницы – английский. Делать это вручную весьма трудоёмко. Как это сделать автоматически?
Решение:
в строке поиска задать: “[a-zA-Z]” (без кавычек);
в строке замены ничего не задавать или ввести в неё “$0” (означает найденный текст);
в опциях замены указать нужный язык: английский.
Объяснение.
Вначале следует выделить весь текст и задать для него русский язык.
Затем выполнить поиск всех символов латиницы и задать для них английский язык. Для этого в строке поиска ввести шаблон альтернативного выбора символа, который выглядит как набор символов, заключённый в квадратные скобки. Так, шаблон “[abc]” ищет символы “a”, “b” или “с”, шаблон 7 – все цифры, а для поиска всех символов латиницы зададим шаблон “[a-zA-Z]” – в нём перечисляются символы как в нижнем, так и в верхнем регистре. А вот так выглядит шаблон для поиска символов кириллицы: “[а-яА-Я]”.
И всё! В качестве пояснения приведён рисунок:
Задача №2. Поиск слова и всех его форм. Например, для задания оформления полужирным. Решим эту задачу на примере какого-то конкретного слова, например, “пример”.
Решение:
в строке поиска задать: “\<(?i)приме(р|ры|ров|ре|ра)\>”
в строке замены ничего не задавать или ввести в неё “$0” (означает найденный текст);
в опциях замены указать оформление полужирным.
Объяснение.
Во-первых, нужно вычислить все формы этого слова. В нашем случае это будут: “пример”, “примеры”, “примеров”, “примера”, “примеру”, “примере” (кроме “например”, “примерный” и пр. – это уже другие слова).
На этот раз нам нужно задать альтернативные варианты не для символов, а для слов. Такая возможность в шаблонах предусмотрена и реализуется путём перечисления через символ “|” (вертикальная черта). То есть строка поиска должна содержать: “пример|примеры|примеров|примере|примера”
Однако такой поиск игнорирует слова с заглавной буквы! Чтобы решить эту проблему нужно в строку поиска ввести метасимвол “(?i)”, который заставит при поиске игнорировать регистр. И теперь строка поиска выглядит так: “(?i)пример|примеры|примеров|примере|примера”. Не беспокойтесь, при выполнении замены регистр будет сохранён.
Но, увы, ещё одна проблема – система находит эти слова внутри других слов («например», «примерный» и пр.), а нам это не нужно! Выход – надо искать слово целиком. Для этого следует обозначить границы слова в строке поиска – начало слова обозначается метасимволами “\<”, а конец – “\>”. И теперь строка поиска выглядит так:
“(?i)\<пример|примеры|примеров|примере|примера\>”, или так:
“\<(?i)пример|примеры|примеров|примере|примера\>”
Это уже готовое решение, но его можно записать значительно проще! Обратите внимание, что при перечислении форм меняется только часть слова. Чтобы отделить её от неизменной части используем возможность группировки символов, для чего альтернативные варианты укажем в круглых скобках. Таким образом, вместо “пример|примеры|примеров|примере|примера” можно написать: “приме(р|ры|ров|ре|ра)” или “пример|пример(ы|ов|е|а)”
И теперь строка поиска выглядит, например, так: “\<(?i)приме(р|ры|ров|ре|ра)\>”
Вот! Наконец-то всё работает так, как нужно! Задача №2 решена.
Задача №3. Поиск текста в кавычках, включая кавычки. Например, для оформления курсивом. Это могут быть названия картин (например «Мечта рыбака»), или что-нибудь ещё.
Решение:
в строке поиска задать: “«.+?»” (без кавычек);
в строке замены ничего не задавать или ввести в неё “$0” (означает найденный текст);
в опциях замены указать оформление курсивом.
Объяснение.
В таблице приведены некоторые метасимволы, которые заменяют обычные символы:
Метасимвол
Заменяет
Значение
И теперь, если известно, что внутри кавычек содержится 5 символов, строка поиска должна выглядеть так: “«\w\w\w\w\w»”. А если неизвестно?
Тогда нам помогут так называемые квантификаторы – метасимволы, задающие число повторений. Они указываются после символа или метасимвола. В таблице приведены некоторые квантификаторы:
Обозначение
Число повторений
И вначале кажется, что нам подойдёт комбинация “«\w+»”. Однако в ней не учитывается наличие пробелов внутри и то, что система может найти текст не до первой закрывающей кавычки, а, например, до второй. Чтобы найти текст только между соседними кавычками, используем короткий вариант: “«\w+?»”. А чтобы найти ещё и пробел (“\s”) внутри, зададим альтернативу: “«[\w\s]+?»”.
Почти всё правильно, однако если мы столкнёмся с названием «Гуси-лебеди», то наш поиск это название проигнорирует. Тогда расширим до максимума набор допустимых символов – используем метасимвол “.” и получим: “«.+?»”. Это и есть долгожданное решение!
Информация для размышления. Но что делать, если помимо названий картин в тексте могут содержаться цитаты и прочие длинные тексты в кавычках? Подумайте сами! А решение смотрите в конце статьи.
Задача №4. Поиск текста в кавычках, НЕ включая сами кавычки. И оформление подчёркиванием (например «Мечта рыбака»).
Решение:
в строке поиска задать: “(?<=«).+?(?=»)”
в строке замены ничего не задавать или ввести в неё “$0” (означает найденный текст);
в опциях замены указать оформление подчёркиванием.
Объяснение.
Нам нужно найти текст в кавычках, но не нужно воздействовать на сами кавычки. Для этого в системе шаблонов предусмотрены возможности просмотра текста: просмотра впереди “(?<=)” и просмотра позади“(?=)”. Просматриваемые символы указываются внутри скобок. Символы, указываемые в шаблоне просмотра, не войдут в результат поиска.
Таким образом, строка поиска вместо “«.+?»” будет выглядеть так: “(?<=«).+?(?=»)”.
Задача №5. Соединение фамилии и инициалов неразрывным пробелом.
Решение:
в строке поиска задать: “(\u[А-Яа-я-]+)\s(\u.)\s(\u.)”
в строке замены задать: “$1
Объяснение.
Такого типа задачи проще всего решать путём начального разбиения и последующей компоновки. В шаблонах для этого предусмотрена возможность запоминания результатов поиска. Искомые фрагменты указываются в строке поиска в круглых скобках, а в строке замены к содержимому скобок можно обратиться путём указания “$1” (первые скобки), “$2” (вторые скобки) и т.д. до “$9” (всего в InDesign доступно 9 фрагментов) и скомпоновать с их помощью нужный фрагмент.
Учтём, что фамилия начинается с заглавной буквы, а инициалы состоят из заглавных букв, разделённых точкой и пробелом. Например, так: “Иванов А. Б.”; или так: “Миклухо-Маклай Н. Н.”
В результате шаблон поиска может выглядеть так: “\u[А-Яа-я-]+\s\u.\s\u.”
То есть вначале ищем заглавную букву “\u”, затем ищем комбинацию букв “[А-Яа-я-]+”, затем инициалы “\s\u.\s\u.”.
Но как сюда можно добавить неразрывный пробел? Используем возможность запоминания результатов – элементы шаблона заключим в круглые скобки:
“(\u[А-Яа-я-]+)\s(\u.)\s(\u.)”.
Результат поиска для первых скобок “(\u[А-Яа-я-]+)” будет помещён в “$1” (фамилия), вторых скобок “(\u.)” – “$2”, третьих “(\u.)” – “$3”.
А для компоновки результата в строке замены укажем “$1
S$2
S$3” (“
S” – это неразрывный пробел)
Решение:
в строке поиска задать: “[\l\u\d\._%-]+@[\l\u\d\._%-]+” (без кавычек);
в строке замены ничего не задавать или ввести в неё “$0” (означает найденный текст);
в опциях замены указать нужное оформление.
Объяснение.
Здесь “\l\u\d” означает буквы в верхнем и нижнем регистре и цифры, а “\._%-“ – это символы, которые допустимы в адресах. Обратите внимание, что символ «точка» обозначается в строке поиска как “\.”, так как написание “.” является не «точкой», а метасимволом (см. задачу №3).
Задача №7. Поиск и оформление url (адреса в интернет).
Решение:
в строке поиска задать: “(((ht|f)tps?://|(www|ftp)\.)[^\s\n]+)(?<![\[\]\. ;!\>\)<-])”
в строке замены ничего не задавать или ввести в неё “$0” (означает найденный текст);
в опциях замены указать нужное оформление.
Объяснение.
Затем фрагмент “[^\s\n]+” ищет любые символы, кроме пробелов (“\s”) и перевода строк (“\n”). Таким образом, фрагмент “(((ht|f)tps?://|(www|ftp)\.)[^\s\n]+)” ищет уже полноценный адрес, однако вместе с адресом захватывает и символ справа от адреса – точку, запятую и прочее. Чтобы исключить эти ненужные символы справа, используется фраза “(?<![\[\]\. ;!\>\)<-])”, которая убирает любой из символов “[].,;!><-“. Обратите внимание, что вместо обычного написания некоторых символов (например “.”) используется написание “\.” – это нужно потому, что эти символы при обычном написании выполняют роль метасимволов. А чтобы вернуть роль обычных символов, их записывают через “\”.
Заключение
Регулярные выражения очень удобно использовать в скриптах – это позволяет автоматизировать обработку текста. А в InDesign CS4 регулярные выражения можно использовать даже в параметрах абзаца для того, чтобы задавать оформление «на лету»!
Полезные ссылки
Примечание.
Решение к задаче №3: “«.»” – задаём длину строки от 3 до 30 символов и тем самым отсекаем длинные фрагменты.
Да ладно, конечно нет! Выражения GREP действительно легко выучить. В InDesign есть инструменты, которые помогут вам сразу и очень просто использовать эту «безумную» технологию.
GREP – это формула (выражение), состоящая из метасимволов, которые могут представлять текст, условия или шаблоны (повторения)
Короче говоря, представьте себе весь текст, содержащийся в учебнике истории. Внутри него много разных дат. Годы во всех этих датах состоят из 4-х цифр.
GREP – это выражение, позволяющее найти все эти числа.
Для чего нужен GREP?
Давайте остановимся на примере книги по истории: с помощью GREP (в частности, этого \b\d\b) вы можете мгновенно найти и отредактировать все эти годы и решить, хотите ли вы:
- придайте датам особый формат (например, все годы выделить жирным шрифтом);
- добавить текст до или после года (например, добавить н.э. после года);
- изменить даты (например, вместо 1700, 1701, 1702 вы хотите, чтобы даты были 1800, 1801, 1802).
Независимо от того, редактируете ли вы книгу из 10 или 300 страниц, ваша рабочая нагрузка будет одинаковой – практически равна нулю!
Звучит интересно, правда?
Но GREP может намного больше. Например, вы можете использовать их для изменения порядка импортированного текста или данных.
Как использовать GREP?
Вы можете использовать GREP в меню Edit > Find/Change («Редактирование > Найти/заменить») или в стиле абзаца, чтобы найти определенное условие.
GREP в стиле абзаца
GREP в стиле абзаца позволяет искать определенное условие и сразу применять форматирование к найденному тексту.
Как только вы вставляете текст, описывающий ситуацию, описанную GREP, и связываете стиль абзаца, в который вы вставили GREP, InDesign немедленно добавляет форматирование.
Форматирование контролируется стилем символа, который вам нужно будет назначить при создании GREP.
Вы можете вставить GREP в стиль абзаца, перейдя на вкладку GREP Style (Стиль GREP) и выбрав New GREP Style (Новый стиль GEP).
После создания стиля GREP вам нужно будет выбрать, какой «Стиль символа» связать с найденным текстом, а затем ввести свой GREP в поле «К тексту».
Использование GREP в Find/Change («Найти/заменить») дает вам сверхспособности.
Вы можете открыть панель Find/Change («Найти/заменить»), перейти на вкладку GREP и в поле Find («Найти текст») вы можете написать свой GREP.
Затем, нажав Find next , Change или Change all («Найти далее», «Заменить» или «Заменить все»), вы можете использовать GREP для изменения форматирования или добавления/удаления/редактирования текста.
Что можно делать с GREP в Find/Change («Найти/заменить») или в Стиле абзаца?
В таблице ниже вы можете увидеть, что можно делать при использовании GREP в поиске/замене или в стилях абзаца.
GREP в «Найти/заменить» | GREP в стиле абзаца |
Добавить форматирование (например, выделение жирным шрифтом для всех дат) | Автоматически добавлять стиль символов (например, каждый раз, когда вы вводите год в текст, число будет иметь форматирование, которое вы добавили к выбранному стилю символов) |
Добавить стиль символа (например, добавить стиль символа для всех дат) | |
Добавить стиль абзаца (например, назначить стиль всем абзацам, содержащим год) | |
Редактировать / Добавить / Удалить текст (например, добавить н.э. на все годы) | |
Изменить порядок текста (например, если даты – ДД/ММ/ГОД, вы можете реорганизовать их с помощью GREP в ГОД/ДД/ММ) |
Начать работу с GREP в InDesign просто
Для написания GREP в InDesign используются представления элементов, которые вы ищете. Мы можем назвать эти представления «метасимволами».
В таблице ниже вы можете найти несколько примеров метасимволов.
Мета-символы | Значение |
. | любой символ |
\d | любая цифра |
\w | любое слово |
\l | любая строчная буква |
\u | любая прописная буква |
+ | символ повторяется один или несколько раз |
^ | начало абзаца |
Узнав логику написания GREP в InDesign, вы можете использовать иконку @:
- рядом с полем To text («К тексту») при вводе GREP в стиле абзаца;
- или в полях Find и Change to («Найти текст», «Заменить на» внутри Find/Change («Найти/заменить») (во вкладке GREP);
чтобы вставить метасимволы и начать писать свой GREP.
Существует также замечательный инструмент, онлайн-тестер и отладчик Regex , который помогает вам писать и понимать GREP.
Какие элементы можно определить с помощью GREP?
В GREP вы можете определить:
- Тип текста, который вы ищете (цифра, буква, пунктуация, глиф и т. д.)
- Позицию (начало абзаца, конец абзаца, ограничение на количество слов и т. д.)
- Количество повторов (один или несколько, ноль или один, ноль или более одного и т. д.)
- условия
После того, как вы изучите различные элементы, написание GREP станет упражнением по объединению различных метасимволов, и вскоре вы сможете писать функции, которые позволят автоматизировать множество процессов.
GREP, описанный выше: \b\d\b означает:
- \b – предел слова, в данном случае указывает на начало слова
- \d – обозначает любую цифру
- – обозначает повторение 4 раза
- \b – предел слова, в данном случае обозначает конец слова
Все это в переводе означает: найди четыре цифры подряд и убедись, что до и после четырех цифр нет другого текста.
Примеры применения GREP
GREP можно использовать для форматирования текста. В начале статьи мы говорили о том, как найти 4-значные годы и превратить их в жирный текст.
Вот другие примеры:
Есть много других задач, которые вы можете автоматизировать с помощью GREP, перечисленные выше – лишь некоторые из них.
Научитесь использовать GREP
В этой статье мы попытались объяснить как можно подробнее, что такое GREP и что с ним можно делать.
GREP – самый мощный и полезный инструмент, которым вы можете научиться пользоваться (после изучения основ InDesign).
Если эта статья заставила вас жаждать больше полезных советов по GREP, загляните в замечательную группу в Facebook сообщества единомышленников-энтузиастов GREP.
GREP-стили – очень удобная вещь, они дают возможность задать в стиле абзаца (Paragraph Styles) стили символа (Charater Styles), которые автоматом будут применяться к тому или иному тексту. Например, с помощью GREP-стилей можно убрать висячие предлоги или применить определенное форматирование ко всем датам.
Добавляют GREP стили в одноименной вкладке у Paragraph Style:
К любому Paragraph Style можно добавлять сколько угодно GREP-стилей. Подробнее о том, что такое GREP-стили и как их писать, можно прочитать в справке по InDesign, ниже будут приведены примеры часто встречающихся в верстке GREP-стилей.
Многие GREP-стили связаны с расстановкой неразрывных пробелов. Чтобы сделать неразрывный пробел, нужно создать стиль, единственным содержимым которого будет галка в чекбоксе No Break, назовем его NoBreak:
Этот стиль понадобится далее.
Как убрать висячие предлоги
Применяем стиль NoBreak
К тексту:
(? )
Как добавить стиль ко всем адресам email автоматом
Добавить стиль ко всем фамилиям с инициалами
Для поиска фамилий формата Иванов В.П. в начале предложения используем выражение:
^(\u[- \w]+ \u\l?\. ?(\u\l?\.)?(, )?)+
Для поиска всех Ивановых В.П. по тексту пишем:
Ну а если инициалы идут перед фамилией, будет такая строчка:
(\u\l?\. ?(\u\l?\.) ?\u\l+ )+
Добавить стиль ко всем датам
Будем искать даты вида 20 января 1994 г.
GREP-выражение будет таким:
(\d|\d\d) (января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря) (\d\d\d\d) (г.)
6 thoughts on “ GREP-стили в InDesign – ускоряем верстку ”
как сделать стиль в котором вместо символа | вставляется перенос строки
Текст исчезает в том случае, когда строчка не помещается в колонку, то есть если у вас конструкция типа *слово-неразрвный пробел-слово*, и в этих словах по каким-то причинам не работают переносы. В таком случае нужно настраивать переносы вручную. Попробуйте перелить этот текст куда-нибудь на поля в более широкую колонку и поставить где-нибудь плавающий перенос.
А как поднять индекс у двух последних символов? Верстаю каталог и в ценах копейки пишем индексом, это можно каким-то грепом автоматизировать?
Оо в 2020 я с этим столкнулся, и нужно создать НОВЫЙ СТИЛЬ «No Break» я ковырялся долго и нашел причину.
Читайте также: