Есть ли в Python библиотечная функция свертывания строк?
-
12-09-2019 - |
Вопрос
Существует ли кросс-платформенная библиотечная функция, которая сворачивала бы многострочную строку в однострочную строку без повторяющихся пробелов?
Я придумал несколько фрагментов ниже, но мне интересно, есть ли стандартная функция, которую я мог бы просто импортировать и которая, возможно, даже оптимизирована на C?
def collapse(input):
import re
rn = re.compile(r'(\r\n)+')
r = re.compile(r'\r+')
n = re.compile(r'\n+')
s = re.compile(r'\ +')
return s.sub(' ',n.sub(' ',r.sub(' ',rn.sub(' ',input))))
P.S.Спасибо за хорошие наблюдения. ' '.join(input.split())
кажется, является победителем, поскольку в моем случае он работает примерно в два раза быстрее по сравнению с поиском и заменой предварительно скомпилированным r'\s+'
регулярное выражение.
Решение
Встроенный string.split()
метод будет разделяться на пробелы, поэтому вы можете использовать его, а затем объединить полученный список с помощью пробелов, например:
' '.join(my_string.split())
Вот полный тестовый скрипт:
TEST = """This
is a test\twith a
mix of\ttabs, newlines and repeating
whitespace"""
print ' '.join(TEST.split())
# Prints:
# This is a test with a mix of tabs, newlines and repeating whitespace
Другие советы
У вас была правильная идея, вам просто нужно было немного внимательнее прочитать руководство по Python:
import re
somewhitespace = re.compile(r'\s+')
TEST = """This
is a test\twith a
mix of\ttabs, newlines and repeating
whitespace"""
somewhitespace.sub(' ', TEST)
'This is a test with a mix of tabs, newlines and repeating whitespace'
multi_line.replace('\n', '')
выполню работу. '\n'
— универсальный символ конца строки в Python.