Python Регулярное выражение для удаления внутренних пробелов, но не \ n и \ t - PullRequest
1 голос
/ 08 января 2020

Я отображаю некоторый текст в диалоговом окне Python, полученном в следующем формате

"   Some text\n\n    With internal padding   "

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

Полученная строка требуемая будет

"Some text\n\nWith internal padding".

Чтобы при отображении все выровнялось по левому краю.

Удаление начального и конечного пробелов просто

text.strip()

Для обработки внутренние пробелы, которые я изначально пробовал

re.sub("\n\s+","\n",text)

, но это привело к удалению любых новых появлений новой строки, которые я не хочу! Я думаю, что мне нужно регулярное выражение, которое говорит

«Удалить все литеральные пробелы непосредственно после символа новой строки, но не иначе»

, но я не могу понять синтаксис re для этого я попытался

re.sub("\n[\s+^\n]","\n",text), но это было не то, что я хотел.

Любая помощь от ре-ниндзя приветствуется.

Ответы [ 4 ]

4 голосов
/ 08 января 2020

Более простое решение без пакета re:

x = "   Some text\n\n    With internal padding   "
'\n'.join(i.strip() for i in x.split('\n'))
2 голосов
/ 08 января 2020

Вы можете использовать ((?<=\n)|^) +| +$| + Это удаляет пробелы в конце каждой строки, а также в конце строки. См regex101

0 голосов
/ 08 января 2020

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

import re

re.sub(" {2,}| $", "", "   Some text\n\n    With internal padding   ")

Вывод:

'Some text\n\nWith internal padding'
0 голосов
/ 08 января 2020
re.sub(r"( )+", " ", "   Some text\n\n    With internal padding   ".strip())

или

re.sub(r"( )+", " ", text.strip())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...