|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Brindeew 2:5020/400 05 Jan 2003 19:39:11 To : All Subject : regexp parser return --------------------------------------------------------------------------------
Hi!
Требуется расставить "немного экранной типографики" regexp'ами, в частности
- неразбивные пробелы после однобуквенных предлогов (перловая имплементация
http://www.artlebedev.ru/tools/typograf/ ).
sub typograf_filter {
# Экранная типографика
my $text = shift;
for ($text) {
# 1. " - " => " тире "
s/\s+- / — /g;
# 2. Hеразбивающий пробел перед однобуквенными предлогами
s/(\s+| |\()([укваояси](?:,){0,1})\s+/$1$2 /g;
# 3. Hеразбивающий пробел между цифрами и наименованиями
s#(\d)\s+(дБ|Вт|В|км|кг|этаж|лет|раз|см|мм|МПа|гг\.|г\.)#$1 $2#g;
# 4. рис. N
s/((?:рис|табл|Рис|Табл)\.)\s+(\d)/$1 $2/g;
# 5. ". В " -> ". В "
s/(\.\s+[УКВАОЯСИ])\s+(.)/$1 $2/g;
}
return $text;
}
Проблема в том, что блок номер 2 запинается на фразах типа " и в ла-ла-ла".
После "и" замена происходит, а после "в" - нет. Как заставить парсер
возвращаться?
P.S. Если кто даст хитрый алгоритм выделения кавычек-лапок из обычных
знаков дюйма ("), буду премного благодарен. Основная сложность для меня -
правильно расставить кавычки в фразах типа ["ООО "Фирма Заря"]. Первые две
- открывающие лапки, третья - закрывающая. Хэндлинг кавычек в кавычках
(внутренние не лапками, а обычными "школьными" кавычками, которые все учили
в первом классе - «Бочкарев пиво для
сообразительных») нужно учитывать :-(.
P.P.S. Пример с "Бочкаревым" честно содран с http://www.design.ru
--
WBR, Andrey Brindeew.
"No one person can understand Perl culture completely"
(C) Larry Wall.
--- ifmail v.2.15dev5
* Origin: MTU-Intel ISP (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/3544b7a393d6.html, оценка из 5, голосов 10
|