Есть ли в Python библиотечная функция свертывания строк?

StackOverflow https://stackoverflow.com/questions/1249786

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top