Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     14 Mar 2007  20:12:40
 To : Vladimir Lomov
 Subject : Re: Поиск и замена с русскими буквами
 -------------------------------------------------------------------------------- 
 
 Vladimir Lomov -> Artem Chuprina  @ Wed, 14 Mar 2007 14:37:04 +0000 (UTC):
 
  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>>> идеи, предложения?
 
  AC>> Второй s срабатывает всегда.  Возможно, не
  VL> всегда будет матчиться
  AC>> написанный там регекс, ну так регекс, который
  VL> матчится всегда - это
  AC>> только .* :-)  Ты чего имел в виду-то, когда
  VL> его писал?
  VL> Для первого варианта: чтобы перед абзацем пустая
  VL> строка вставлялась. Затем убирались лишние пробелы.
  VL> Для второго варианта: вставить пустую строку перед
  VL> абзацем, убрать все символы новой строки для
  VL> одного абзаца, чтобы поместить его в одну строку.
 
 Убрать все символы новой строки - это s/\n//g; Тебе, наверное, надо было
 не убрать, а заменить на один пробел.  Это s/\n/ /g; Hу, для надежности
 - s/\r?\n/ /g; Впрочем, он там всего один, этот символ, ты ж построчно
 читаешь.  Так что g можно и не писать.  А ты что за хрень нарисовал?
 Правильно, "если строка начинается с буквы, цифры или _, убрать в ней \n
 и добавить спереди и сзади по пробелу.  А если не начинается, то
 оставить как есть."
 
 Это не программирование на ассемблере, это гораздо более высокоуровневая
 вещь.  Для простых операций, как правило, достаточно четко
 сформулировать то, что ты делаешь, на естественном языке, а потом
 перевести на обозначения регексов _один в один_.  Дополнительные
 эротические фантазии при этом переводе неуместны.
 
 -- 
 Artem Chuprina
 RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
 
 Тормоз - тоже механизм, только медленный совсем.
 --- ifmail v.2.15dev5.3
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Поиск и замена с русскими буквами   Vladimir Lomov   11 Mar 2007 14:06:05 
 Поиск и замена с русскими буквами   Dmitry E. Oboukhov   11 Mar 2007 23:12:03 
 Re: Поиск и замена с русскими буквами   Vladimir Lomov   12 Mar 2007 04:12:22 
 Поиск и замена с русскими буквами   Dmitry E. Oboukhov   12 Mar 2007 11:15:38 
 Поиск и замена с русскими буквами   Alexander Zigar\'   12 Mar 2007 13:54:34 
 Поиск и замена с русскими буквами   Dmitry E. Oboukhov   12 Mar 2007 14:26:30 
 Re: Поиск и замена с русскими буквами   Serge Chervjakov   12 Mar 2007 11:21:42 
 Re: Поиск и замена с русскими буквами   Vladimir Lomov   13 Mar 2007 13:24:20 
 Re: Поиск и замена с русскими буквами   Artem Chuprina   13 Mar 2007 16:16:40 
 Re: Поиск и замена с русскими буквами   Vladimir Lomov   14 Mar 2007 18:37:04 
 Re: Поиск и замена с русскими буквами   Artem Chuprina   14 Mar 2007 20:12:40 
 Re: Поиск и замена с русскими буквами   Artem Chuprina   12 Mar 2007 16:36:25 
Архивное /ru.perl/25606efc8c593.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional