В Notepad++ планирую обрабатывать текст регуляркой \?$|!$|;$|:$ Надо в поле замены поставить выражение, чтобы на концах найденных строк поставить дополнительную точку. Без замены этих знаков пунктуации. Каким выражением? Далее после того, как произведу некоторую обработку текста после этого, то надо будет снова найти эти строки, на конце которых появилась точка в дополнение к этим символам конца предложения и эту точку убрать. Конец строки не изменится, то есть это также останется на конце строки. Прошу подсказать, как это сделать наиболее экономичным по времени способом?
Я так понимаю, что ТС хочет расставить временные маркеры. @dobrmir, а мне больше интересно, что вы собираетесь делать в промежуточном этапе с этой строй. Возможно, что эти манипуляции и не понадобились бы. PHP: <?php $str_in = <<<EOL abc def; ghi! jkl mno? EOL; $str_tmp = preg_replace('/(\?|!|;|:)$/m', '$1.',$str_in); // точку добавили $str_out = preg_replace('/(\?|!|;|:)\.$/m', '$1',$str_tmp); // точку убрали
Есть регулярка (?<!\.)\n(?!$) склеивания разорванных строк. То есть таких, как в газетных столбцах. Если на конце строки точка, то она несколько по другому обрабатывает такие строки (оставляет конец предложения на конце строки для них). А для других знаков конца предложения на конце строки она не предусмотрена (хочется, чтобы для таких окончаний предложений строка тоже не склеивалась и конец предложения остался на конце строки). Раньше изучал основы PHP c редактором Codelobster PHP Editor, потом забросил и забыл, что выучил. Таким образом Ваш код в режиме отладчика сейчас применить не смогу, так как не настроено это дело и не помню, что там нужно делать. А вот, если было бы для Notepad++, то сразу бы применил, так как в нём во множестве вкладок одновременно правлю фрагменты статей или небольшие статьи целиком. Таким образом расставил бы точки на концах предложений, если они совпадают с концом строки, склеил, а потом удалил бы лишние точки после обработки.
Я честно говоря не особо все понял, но зачем скажем ставить именно точку, которая и так может случайно встречаться в тексте и существует вероятность ошибок, когда будете ее убирать. ИМХО для маркера лучше использовать символ, который в тексте сложно встретить, например * Если я правильно понял, то в notepad можно попробовать ищем (?m)(\?$|!$|;$|:$) заменяем на \1. чтобы удалить точку (?m)(\?|;|:|!)(\.)$ \1 должно заменить на ? ! ; : НА КОНЦАХ СТРОК ТОЛЬКО на ?. !. ;. :.
Насчёт * сам не додумался. Если бы была бы точка уже изначально на конце строки, то в том то и дело, что надо, чтобы она не удалилась. Попробовал. Точка или * ставится, только обратно не удаляется. Так и так делал: Код (Text): (?m)(\?|!|;|:)(*)$ (?m)(\?|!|;|:)(\*)$
Значит после того как обработаешь текст это уже не КОНЕЦ СТРОКИ, поэтому и не срабатывает. (\?|:|;|!)(\*) \1 Вот так удалит все звездочки в любых местах!
Так нужно, чтобы это остался конец строки. И звёздочку надо удалять не в любых местах, а именно заменять созданное сочетание. Если это не возможно, то буду искать решение по обработки несколькими регулярками одна за другой или нужно делать код для Codelobstera например, который обойдёт файлы в папке. Если это будет код для PHP, то надо ещё, чтобы если встречаются несколько строк заглавными буквами, то чтобы его не склеивало со строками ниже, в котором не только заглавные буквы. Это для заголовков. То есть, чтобы всё за одно нажатие кнопки делалось: 1. Склеить переносы Мороже- ное 2. Раставить * 3. (?<!\.)\n(?!$) надо переделать, так как это для точки изготовлено, а не для * 4. После обработки выражением предыдущего пункта удалить *
Это для постов на форуме или в блоге. Например, хочется поделиться некоторыми небольшими статьями, заметками о здоровье, присланными людьми в журналы. А формат набора там многоколоночный. И чтобы сделать нормальный текст, можно поступить таким образом.
Понял как сделать без заморочного варианта, по которому создал эту тему, а нормальным способом. Вот так работает (?<!\?|\.|\!)\n(?!$) Также нужно, чтобы не склеивались строки, набранные целиком заглавными буквами, с текстом до и после, а между собой, две строки или более, набранные целиком заглавными буквами можно чтобы склеивались, а можно чтобы не склеивались (как получится). Вот такой вариант (?<!\?|\.|\!|[А-Я])\n(?!$) склеивает начало строки, набранной целиком заглавными буквами, с предыдущей строкой, что не нужно. Как подправить? Вот образец текста: асрасопмиьоопр. смрсмтм аратматмтм чпвпипрсмр? араопопмоп арарсрс! мроапоп араопао ВОТ ЭТО ДА Надо же, бывает и так дела В Notepad++ надо включить при поиске и замене галочку «Учитывать регистр».
Благодарю. А как можно сделать, чтобы не получалось также вот таких склееных фрагментов (хотя бы, то что возможно)? ЗАГАДКИ ЖИВОЙ ПРИРОДЫ РАЗГОВОР ПРОДОЛЖАЕТСЯ 194 Часть первая. ИЗ ТЬМЫ ВЕКОВ .... 196 По следам неизвестных В ЦАРСТВЕ ПЛУТОНА Величайшая слабость ума В. Г. Белинскиц С незапамятных времен «Волшебная» рогулька История рогульки