Информационный портал
pocket versionPOCKET  wikiWIKI  FAQFAQ  ПоискПоиск  ПользователиПользователи  ГруппыГруппы  РегистрацияРегистрация  ПрофильПрофиль  Войти и проверить личные сообщенияВойти и проверить личные сообщения  ВходВход

Регулярные выражения в anyFB2
На страницу Пред.  1, 2
 
Найти сообщения без ответов
Начать новую тему   Ответить на тему    Список форумов www.fictionbook.org -> Сделано для FB
Предыдущая тема :: Следующая тема  
Автор Сообщение


Stranger
Модератор

Модератор

Зарегистрирован: 29.10.2004
Сообщения: 1479
Откуда: Москва

СообщениеДобавлено: Пт Май 06, 2005 15:06    Заголовок сообщения: Ответить с цитатой

0ff писал(а):
А, есть такая беда. Кликни на одной "жирной" букве правой клавишей -> выделить весть текст с подобным форматированием. Выбери стандартное форматирование и потом жми на [F], чтоб сделать текст жирным.

Вот, блин, а я мучался. Спасибо большое! Век живи - век учись.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


kot73
Гость





СообщениеДобавлено: Пт Май 06, 2005 15:20    Заголовок сообщения: Ответить с цитатой

Продолжение (мои регэкспы)...

Редактирование готовой книги (fb2 файла)

Замена прямых кавычек на "елочки" - хуже того варианта, что работает в причесывалке либы, т.к. ориентирован только на русские тексты. Иначе заменит прямые кавычки внутри тегов.
Find: /"([А-я])/
Replace ALL: /«\1/
Find: /([А-я?!;:.,…)])"/
Replace ALL: /\1»/
Вместо вложения ([А-я]) можно использовать (\w+) - что позволяет работать с любым тексом, но только на этапе его подготовки к конвертации в fb2 - из-за указанного выше недостатка.

Удаление переносов - часто встречается тексты, содержащие их:
воз- можность удалить все переносы
Find: /(\w+)[\x2D\x97\x96] /
Replace ALL: /\1/
Оговорка:
Удалит дефисы из таких обротов, когда идет перечисление составных слов:
я вам пишу супер- и мегатексты
А также ошибки в написании тире:
правка текста- это хорошо
Поэтому я пользуюсь кнопкой Replace&SearchNext, чтобы в таком случае вручную поправить и нажать SearchNext.

Вставка пропущенного после тире пробела :
Find: / [\x2D\x97\x96](\w+)/
Replace ALL: / \х96 \1/
Возможна ситуация, когда допущена следующая ошибка:
правка текста чего -то плоха
Тогда этот регэксп не исправит ошибку, а заменит на другую. Поэтому я пользуюсь кнопкой Replace&SearchNext, чтобы в таком случае вручную поправить и нажать SearchNext

Удаление пробела перед знаками препинания и скобками:
Find: / ([.,;:!?…)])/
Replace ALL: /\1/

Вставка пропущенного пробела после знаков препинания, перед тире:
Find: /([,.;:!?…])[\x2D\x97\x96] /
Replace ALL: /\1 \х96 /

Замена трех точек на символ троеточия:
Find: /\.{3}/
Replace ALL: /…/

Замена неправильно поставленых кавычек (AnyToFB2 неправильно расставляет кавычки-елочки в случае если закавыченная фраза начинается с троеточия, по крайней мере раньше).
Find: / »…/
Replace ALL: / «…/

Замена заголовков, содержащих *** на subtitle (намного быстрее, чем вручную в FBE Smile). Вставляемый тег пустой строки можно и убрать - кому как нравится.
Find: /</section>[^<]*<section>[^<]*<title>[^<]*<p>(\*+)</p>[^<]*</title>/
Replace ALL: /<empty-line/><subtitle>\1</subtitle><empty-line/>/

Удаление лишних тегов, на примере курсива (AnyToFB2 лепит их как то странно, если текст до конвертации отбивается подчеркиванием)
Find: /<emphasis>(.+?)</emphasis>(.+?)<emphasis>(.{1,2})</emphasis>/
Replace ALL: /<emphasis>\1\2\3</emphasis>/
Т.е. было:
<p><emphasis>правка</emphasis> текст<emphasis>а</emphasis> - это хорошо</p>
Станет:
<p><emphasis>правка текста</emphasis> - это хорошо</p>
Этот регэкпс я сейчас использую редко, но его можно всячески модифицировать под конкретную ситуацию

Соединение разорванных предложений:
Find: /([\w+,;\x2D\x97\x96 ])</p>(\r\n)\s*?<p>/
Replace: /\1 /
Пользуюсь кнопкой Replace&SearchNext, чтобы контролировать каждое исправление.

Вставка пропущенного пробела после знаков препинания и скобок:
Find: /([\w+\x2D\x97\x96"»][.,;:!?()])([\w+\x2D\x97\x96])/
Replace: /\1 \2/
Этот регэксп поймает такие слова как т.е., т.д., И.О., а также l:href - туда вставлять пробелы не нужно. Поэтому пользуюсь кнопкой Replace&SearchNext, чтобы контролировать каждое исправление.
Чтобы он не ловил И.О. нужно включить регистрозависимость и вместо [\w+] использовать [а-я] (или [a-z] - во всех случаях, когда редактируется англйский текст, я этого дальше повторять не буду)

Поиск неправильного сочетания знаков препинания и скобок:
Find: /[.,;:!?(…][,;:]/
Далее, править руками по ситуации.

Поиск предложений, начинающихся с маленкой буквы - обязательно включить регистрозависимый режим:
Find: /([А-Яа-я][.?!] )[а-я]/
Далее, править руками по ситуации. Ловит варианты текста, которые надо оставлять как есть (когда это нужно):
Править текст? будешь? не будешь!

Поиск диалогов, начинающихся с маленкой буквы - обязательно включить регистрозависимый режим:
Find: /<p>[\x2D\x97\x96][ \xA0][а-я]/
Далее, править руками по ситуации.

Поиск строк, начинающихся с маленкой буквы - обязательно включить регистрозависимый режим:
Find: /<p>[а-я]/
Далее, править руками по ситуации.

Замена обычного пробела на пробел фиксированной ширины после тире, замена тире и дефисов на длинное тире (в диалогах) - это другой вариант регэкспов, которые в либе это делают:
Find: /<p>[\x2D\x97\x96][ \xA0]/
Replace ALL: /<p>\x97\xA0/

Замена пробела фиксированной ширины на обычный после тире, замена короткого тире и дефисов на длинное тире (в обычных предложениях):
Find: / [\x2D\x97\x96][ \xA0]/
Replace ALL: / \x97 /

Алгоритм правки часто встречающегося формата ссылок на валидный для бибилотеки (надо смотреть по ситуации, бывает другое оформление):
Step 1
Find: /<a l:href="#N(\d+)" type="note"/
Replace ALL: /<a l:href="#FbAutId_\1" type="note"/
Step 2
Find: /(<empty-line/>|<section>)?\r\n\s*<subtitle id="N(\d+)">(\d+)</subtitle>/
Replace ALL: /</section>\r\n<section id="FbAutId_\2">\r\n<title>\r\n<p>Note\3</p>\r\n</title>/
(не забыть удалить <empty-line/> в конце раздела ссылок)
Step 3
Find: /<body name="footnotes">\r\n\s*</section>/
Replace: /<body name="notes">/

Забыл упомянуть:
Порядок прогона текста через регэкспы важен - уменьшает кол-во ручной работы и пропущенных ошибок. Это касается и моих и библиотечных регэкспов. Порядок - тот, в каком я их написал.
Вернуться к началу


Stranger
Модератор

Модератор

Зарегистрирован: 29.10.2004
Сообщения: 1479
Откуда: Москва

СообщениеДобавлено: Пт Май 06, 2005 15:28    Заголовок сообщения: Ответить с цитатой

Что касается замены прямых кавычек на «ёлочки», то есть рецепт (от GribUser'a) для FB Tools, привожу на случай, если кто не знает:
\s"(\S) --> ' «$1'
(\S)"\s --> '$1» '
^" --> «
"$ --> »
Применяется без апострофов (даны чтобы показать пробел).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


kot73
Гость





СообщениеДобавлено: Пт Май 06, 2005 15:45    Заголовок сообщения: Ответить с цитатой

Stranger

Угу, только в FBE в режиме просмотра, а не исходника. EditPad Pro работает в режиме исходника, поэтому там это тоже не прокатит. Есть риск замены прямых кавычек внутри тегов.
А так, да, самый правильный регэксп для этого.
Но пропустит прямые кавычки, отбитые с двух сторон пробелами. Это надо иметь ввиду и проверять.
Вернуться к началу


Stranger
Модератор

Модератор

Зарегистрирован: 29.10.2004
Сообщения: 1479
Откуда: Москва

СообщениеДобавлено: Пт Май 06, 2005 15:48    Заголовок сообщения: Ответить с цитатой

kot73 писал(а):
Но пропустит прямые кавычки, отбитые с двух сторон пробелами. Это надо иметь ввиду и проверять.

Не только пробелами, но и "непробелами", <-- типа вот этой последней кавычки. Но на практике таких мало остается, правится ручками в течение одной минуты.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


GribUser
Автор формата FB2 - Автор библиотеки FB

Автор формата FB2 - Автор библиотеки FB

Зарегистрирован: 30.09.2004
Сообщения: 2475
Откуда: Москва

СообщениеДобавлено: Пт Май 06, 2005 16:06    Заголовок сообщения: Ответить с цитатой

Кусок из моей причесывалки
Код:
   if ($BookLang eq 'ru'){
      while ($XMLBody=~s/>([^>]*?([\(\s"]))?"([^\"<]+?)([^\s"\(<])"/>$1«$3$4»/g){}
      while ($XMLBody=~s/>([^>]*?)«([^»<]*?)«([^»<]*?)»/>$1«$2„$3“/g){};
      print "step 11\n";
      $XMLBody=~s/([\.,!\?;]) –/$1\ –/g;
   }
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора


Stranger
Модератор

Модератор

Зарегистрирован: 29.10.2004
Сообщения: 1479
Откуда: Москва

СообщениеДобавлено: Пт Май 06, 2005 16:10    Заголовок сообщения: Ответить с цитатой

GribUser писал(а):
Кусок из моей причесывалки

Для английских текстов планируется причесывалка?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


GribUser
Автор формата FB2 - Автор библиотеки FB

Автор формата FB2 - Автор библиотеки FB

Зарегистрирован: 30.09.2004
Сообщения: 2475
Откуда: Москва

СообщениеДобавлено: Пт Май 06, 2005 22:40    Заголовок сообщения: Ответить с цитатой

Stranger писал(а):
Для английских текстов планируется причесывалка?
Я ихних правил не знаю, чего не знаю, туда не лезу. Хотя, я так понимаю, там всего-то разницы елочки на двойные лапки сменить а вложенные лапки на одинарные поменять.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора


Stranger
Модератор

Модератор

Зарегистрирован: 29.10.2004
Сообщения: 1479
Откуда: Москва

СообщениеДобавлено: Сб Май 07, 2005 10:38    Заголовок сообщения: Ответить с цитатой

GribUser писал(а):
ихних правил не знаю, чего не знаю, туда не лезу.

Да ладно тебе скромничать! Всё ты знаешь, просто сознательно саботируешь Twisted Evil
Сюда ходи.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Zenzen
Зрелый участник форума

Зрелый участник форума

Зарегистрирован: 14.10.2004
Сообщения: 143
Откуда: Токио

СообщениеДобавлено: Сб Янв 21, 2006 13:49    Заголовок сообщения: Ответить с цитатой

Гуру регулярных выражений, подскажите, пожалуйста, как в FBE можно найти все места, где кавычки-елочки встречаются уже внутри текста, оформленного теми же елочками, и заменить их на лапки.

Т.е.
«Тили-тили «трали-вали» это мы не проходили».
нужно заменить на
«Тили-тили „трали-вали“ это мы не проходили».

Не обязательно мудрить с заменой, хотя бы найти все места, с текстом между двумя '«', где нет закрывающей '»'.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


GribUser
Автор формата FB2 - Автор библиотеки FB

Автор формата FB2 - Автор библиотеки FB

Зарегистрирован: 30.09.2004
Сообщения: 2475
Откуда: Москва

СообщениеДобавлено: Сб Янв 21, 2006 14:05    Заголовок сообщения: Ответить с цитатой

А это оно и было сверху (в исходнике делать):
Поиск
>([^>]*?)«([^»<]*?)«([^»<]*?)»


замена
>\1«\2„\3“


все приведет в порядок. Но для русских тектов либа это сама далеат, как я уже писал.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора


Zenzen
Зрелый участник форума

Зрелый участник форума

Зарегистрирован: 14.10.2004
Сообщения: 143
Откуда: Токио

СообщениеДобавлено: Сб Янв 21, 2006 14:26    Заголовок сообщения: Ответить с цитатой

GribUser
Во! Спасибо!

Либа - Либой, а мы сами тоже хотим... Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.fictionbook.org -> Сделано для FB Часовой пояс: GMT + 3
На страницу Пред.  1, 2
Страница 2 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group