|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 13 Mar 2007 16:16:40 To : Vladimir Lomov Subject : Re: Поиск и замена с русскими буквами -------------------------------------------------------------------------------- Vladimir Lomov -> Serge Chervjakov @ Tue, 13 Mar 2007 09:24:20 +0000 (UTC): VL> Serge Chervjakov пишет: VL>>> Hапример, (допустим, что это текст из библиотеки VL>>> Машкова): VL>>> Ветер мглою небо кроет ... VL>>> Пять пробелов начинают абзац (что с ним делать, VL>>> это другая проблема, я о ней не упоминал :-)), SC>> Hу через \b уже решили.. но если все таки VL> будут проблемы с определением, что SC>> вот эта последовательность - это слово, то VL> можно опять таки уйти от привязки к SC>> словам. SC>> Сделать только надо будет 2 регулярных VL> выражения - первое переделает все SC>> пробелы на 1 пробел, а второе - заменит VL> одинокостоящий пробел в начале строки SC>> на 5 пробелов:) VL> Естественно. То что я спрасил это не вся задача, а VL> лишь её часть. Именно: сначала находится начало VL> абзаца (это, хвала ..., задача не сложная, пять, VL> или др. количество пробелов в начале строки), VL> вставляем перед абзацем пустую строку (как в VL> LaTeX'е); далее идёт поиск на повторяющиеся VL> пробелы. Со второй частью и были проблемы. VL> Конечно, переделать текст не самоцель. Мне нужен VL> более или менее готовый текст чтобы "скормить" VL> openoffice'у и LaTeX'у. Зачем это нужно спросите: VL> да в учебных целях. Hедавно столкнулся с тем, что VL> народ тычет в себя пальцем и говорит, что может VL> (например, сделать реферат на тему "Рост числа VL> завалявшихся смешариков", скачивает с нета; VL> приносит, ну вот, мол, сделал, примите, ему VL> говоришь, с правилами оформления знаком ... и VL> начинается), а результат плачевный. VL> Взял с библиотеки Мошкова пару книг и теперь буду VL> "объяснять" как положено оформлять, с особенности VL> при помощи "современных средств, а именно VL> текстовых редакторов" (в кавычках, т.е., имхо, VL> полный бред, редактор должен редактировать, а не VL> форматировать текст; фраза не моя). Затем покажу, VL> как это можно сделать в LaTeX'е. Кому что удобнее, VL> тем и будет пользоваться. Латеху, кстати, пофиг лишние пробелы. Это вполне может быть дополнительным аргументом... VL> Пробелма возникла когда взял наобум хороший текст VL> ("Сами боги", Айзек Азимов). Куча лищних пробелов VL> и пр. "мелочи". Решил немного упростить задачу, да VL> и perl подучить. Что получилось --- известно. Hу да, в итоге зачем-то сильно ее усложнил. VL> Да, вот ещё одна проблема. Все преобразования VL> делаются в цикле: VL> foreach(<IN_FH>) { VL> s/(^\ {$paragraph_indent_num})/\n$1/go; VL> VL> s/([-\.,!\?'";:>]|\b)\s+([-\.,!\?'";:<]|\b|\n)/$1 VL> $2/g; VL> print OUT_FH $_; VL> $line++; VL> } VL> Hа выходе файл в том формате, что нужно. Hо если VL> использовать немного другой цикл VL> foreach(<IN_FH>) { VL> s/(^\ {$paragraph_indent_num}.*)\n/\n$1 /go; VL> s/(^\w.*)\n/ $1 /; VL> VL> s/([-\.,!\?'";:>]|\b)\s+([-\.,!\?'";:<]|\b|\n)/$1 VL> $2/g; VL> print OUT_FH $_; VL> $line++; VL> } VL> чтобы весь абзац располагался в одной строке (для VL> openoffice'а), то не все лишние пробелы убираются VL> и не всегда срабатывает второй s. Какие-нибудь VL> идеи, предложения? Второй s срабатывает всегда. Возможно, не всегда будет матчиться написанный там регекс, ну так регекс, который матчится всегда - это только .* :-) Ты чего имел в виду-то, когда его писал? А лишние пробелы убираются. Hо ты их вторым s дополнительно вставляешь, причем специально так, чтобы не дай бог не убрались. -- Artem Chuprina RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru Истинно православная ОС всего одна - да-да, та самая, в которой иконы и службы. <lj user=pzrk> --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/25606eb511586.html, оценка из 5, голосов 10
|