Используйте регулярные выражения, чтобы заменить все возможные подстроки, сделанные из символов новой строки - PullRequest
0 голосов
/ 14 апреля 2020

Я пишу регулярное выражение для удаления чрезмерного количества разрывов строк из фрагмента текста и замены их на разрыв одной строки, когда символ новой строки \n может встречаться в любом количестве конкатенаций с самим собой и символом пробела. Однако я не могу понять это правильно. Вот один текст, который не работает:

text = 'Это текст \ n \ n \ n для иллюстрации. \ n \ n \ n \ n Это очень раздражает: \ n почему? '

Вот мой код:

import re

clean = re.compile(
            "( *(?:\\n.?)+) +").sub(r"\n", text)

Однако я продолжаю получать разрыв строки в третьей строке I не хочу:

>>>print(clean)


"This is a text
for illustration.

It is  most annoying:
why?

Кто-нибудь может предложить лучшее регулярное выражение? Спасибо.

Ответы [ 2 ]

3 голосов
/ 14 апреля 2020

Вы можете использовать эту замену регулярного выражения в режиме MULTILINE:

\s+$\s*

Это регулярное выражение соответствует 1+ пробелам (включая новую строку), за которыми следует конечный якорь и необязательные 0 или более пробелов. Нам просто нужно заменить его одной строкой.

Демонстрация RegEx

Код:

>>> regex = r"\s+$\s*"
>>> s = ("This is a text \n"
...     " \n\n"
...     " for illustration. \n"
...     " \n"
...     " \n\n"
...     " It is most annoying: \n"
...     " why?")
>>> print ( re.sub(regex, '\n', s, 0, re.M) )

This is a text
for illustration.
It is most annoying:
why?
1 голос
/ 14 апреля 2020

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

re.sub(r'[^\S\n]*(?:\n[^\S\n]*)+', '\n', text)

См. Демоверсию regex . Подробности:

  • [^\S\n]* - 0+ пробелов, отличных от перевода строки
  • (?:\n[^\S\n]*)+ - 1 или более вхождений символа перевода строки, за которым следуют 0 или более пробелов, отличных от строки feed.

См. Python демо :

import re
text = 'This is a text \n \n\n for illustration. \n \n \n\n It is most annoying: \n why?'
print ( re.sub(r'[^\S\n]*(?:\n[^\S\n]*)+', '\n', text) ) 

Выход:

This is a text
for illustration.
It is most annoying:
why?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...