Есть ли в Python библиотечная функция string-collapse? - PullRequest
4 голосов
/ 09 августа 2009

Существует ли кроссплатформенная библиотечная функция, которая бы сворачивала многострочную строку в однострочную без повторяющихся пробелов?

Ниже приведен фрагмент кода, но мне интересно, есть ли стандартная функция, которую я мог бы просто импортировать, возможно, даже оптимизированная в 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+' регулярным выражением.

Ответы [ 3 ]

12 голосов
/ 09 августа 2009

Встроенный метод 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
4 голосов
/ 09 августа 2009

У вас была правильная идея, вам просто нужно прочитать руководство по 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'
0 голосов
/ 09 августа 2009
multi_line.replace('\n', '')

сделает работу. '\n' - универсальный символ конца строки в python.

...