Pergunta

Existe uma função de biblioteca multi-plataforma que entraria em colapso uma seqüência de várias linhas em uma string com uma única linha sem espaços repetindo?

Eu vim com alguns snip abaixo, mas gostaria de saber se existe uma função padrão que eu poderia apenas importação que é talvez ainda otimizada em 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. Obrigado por boas observações. ' '.join(input.split()) parece ser o vencedor como ele realmente corre mais rápido cerca de duas vezes no meu caso comparado a procurar substituir com uma pré-compilada r'\s+' regex.

Foi útil?

Solução

A built-in método string.split() irá dividir em corridas de espaço em branco, assim você pode usar isso e, em seguida, juntar-se à lista resultante utilizando espaços, como este:

' '.join(my_string.split())

Aqui está um script de teste completo:

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

Outras dicas

Você teve a idéia certa, você só precisava ler o manual python um pouco mais de perto:

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', '')

irá fazer o trabalho. '\n' é um fim universal do caráter de linha em python.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top