Замените тройные символы новой строки двойными символами новой строки - PullRequest
2 голосов
/ 07 ноября 2019

Я пытаюсь выполнить некоторую очистку формата в текстовых файлах. Я хочу заменить все тройные (или более) новые строки двойными новыми строками и все двойные новые строки одной новой строкой. Сначала я открываю файл следующим образом:

text = ""
with open(filename) as fp:  
   for cnt, line in enumerate(fp):
       text += line

, но заменяя новые строки следующим образом: text = re.sub(r'\n\n', '\n', text).strip()
или вот так text = text.replace("\n\n", "\n") заменяет все (несколько) новых строк одной новой строкой.

Что я делаю не так?
Спасибо за любую помощь и объяснения.
Редактировать
Я хочу добиться чего-то вроде этого:

text text text text text text text text text text text text text text text

text text text text text text text text text text text text text text text

text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text


text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text

становится:

text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text

text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text

1 Ответ

1 голос
/ 07 ноября 2019

Вы можете использовать

with open(filename, 'r') as fp: 
    print( re.sub(r'(\n{3,})|\n\n', lambda x: "\n\n" if x.group(1) else "\n", fp.read()) )

ПРИМЕЧАНИЯ

  • Запустить регулярное выражение для всего текста файла, таким образом, используйте fp.read(), чтобы получить его,не читать строку за строкой
  • Регулярное выражение (\n{3,})|\n\n сопоставляет и вводит 3 или более символов новой строки в группу 1 или соответствует двум символам новой строки. Если группа 1 соответствует, замена - это двойной перевод строки, в противном случае - один. Поскольку это условная замена, в качестве аргумента замещения используется вызываемое (здесь выражение lamda).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...