Как удалить разрывы строк (или возврат каретки) только из определенных частей блока текста?

15737
Luke Allen

Всякий раз, когда я копирую отформатированный текст из файла PDF, который отформатирован так, чтобы иметь разрывы строк (или возврат каретки), мне нужно найти способ удалить эти разрывы строк, не удаляя формат абзаца.

Для этого мне нужно использовать RegEx (Регулярные выражения), чтобы удалить только разрывы строк, которым не предшествует точка.

Так, например, если строка текста имеет разрыв строки сразу после точки, это, очевидно, почти всегда является допустимым разрывом строки, который начнет новый абзац. Если строка текста содержит середину слова разрыва строки или после слова без точки, это просто часть плохого форматирования, от которого мне нужно избавиться.

Моя проблема в том, что я не знаю, как использовать RegEx, чтобы он удалял только теги ^ p в слове или CRLF или разрывы строк в любом формате при условии, что он пропускает после периода.

6
Пожалуйста, укажите вашу операционную систему. На всех, кроме окон, это тривиально. Я так понимаю, вы используете Windows? Какой движок RegEx вы используете? Нам нужно знать больше деталей, чтобы предоставить вам работающий RegEx. terdon 12 лет назад 0
Вы просто хотите удалить разрывы строк? Я подозреваю, что вы действительно хотите заменить их пробелами. А как насчет разрывов строк после `?` Или `!`? Или `.)`, `?)`, Или `!)`? Scott 11 лет назад 0

4 ответа на вопрос

3
mar4enk0

Решение для MS Word:

  1. Откройте «Найти и заменить» ( Ctrl+ H) и установите флажок «Использовать подстановочные знаки». Если вы не видите опцию «Использовать подстановочные знаки», нажмите «Дополнительно».
  2. Скопируйте следующее в поле «Найти что»: ([!.])^0013
  3. Скопируйте следующее в поле «Заменить чем»: \1
  4. Нажмите «Заменить все»

Объяснение:

  • [!.] означает «найти каждый символ, кроме точки»
  • ^0013 является знаком абзаца, поэтому в «Найти что» мы найдем каждый не точечный символ с последующим знаком абзаца
  • Скобки означают, что мы поместим этот не точечный символ в память для последующего использования
  • \ 1 заменяет наш запомненный символ в том месте, где мы его находим

Обратите внимание, что ^0013это не внутри скобок, поэтому окончательный текст будет без знаков абзаца.

0
hsawires

In Word try to find and replace the manual line break ^l with the paragraph mark ^p.

Это из PDF все разрывы строк: ^ p Luke Allen 12 лет назад 0
Хорошо. попробуйте заменить ^ p на это исправит пометки абзаца, но единственная проблема, с которой вы столкнетесь, - весь абзац будет одним абзацем. hsawires 12 лет назад 0
да, это то, что вопрос, который я отправил, пытается решить, я уже знал, чтобы заменить ^ р , нужно заменить только ^ p, которые не имеют перед ними, что сохраняет абзацы, но не разрывы форматирования Luke Allen 12 лет назад 0
Я попытался сохранить PDF в acrobat в текстовый документ, и он отлично работает, за исключением того, что вы можете выполнить дополнительные действия для очистки файла doc от нежелательных текстов. какое-то другое программное обеспечение может помочь вам конвертировать PDF2DOC hsawires 12 лет назад 0
0
user1583016

Because sentences can end in more punctuation than a period I’ve updated hsawires’ answer to:

  1. Find every symbol except dot, question mark, exclamation point, close quote or colon.
  2. Additionally, in some cases you’ll want to add a space after \1 in the “Replace What” box to keep from combining the last word on one line with the first word on the next line.

Solution for MS Word:

  1. Open Find & Replace (Ctrl+H) and check the “Use wildcards” option.
  2. If you don’t see the “Use wildcards” option, click “More.”
  3. Copy the following into the “Find What” box: ([!.\?\!"':])^0013
  4. Copy the following into the “Replace What” box: \1
  5. Click “Replace All.”

Explanation:

[!.\?\!"':] means “find every symbol except dot, question mark, exclamation point, close quote or colon.” - ^0013 is a paragraph mark, so in the “Find What” we will find every non-dot symbol followed by a paragraph mark. - Parentheses mean that we will place that non-dot symbol in memory to use later. - \1 replaces our memorized symbol at the location where we find it.

Note that the ^0013 is not inside the parentheses, so the final text would be without paragraph marks.

0
Keawe

Гораздо более простой способ создать / изменить адресный блок, прежде чем вырезать и вставить его в электронное письмо или другой документ, - объявить таблицу из 3/4 строк и ввести адресные данные в каждую строку. Тогда избавьтесь от линий.