Python: dividindo a string por todos os caracteres de espaço

Para dividir strings por espaços em python, geralmente se usasplit método da string sem parâmetros:

>>> 'a\tb c\nd'.split()
['a', 'b', 'c', 'd']

Mas ontem deparei com uma string que usavaZERO WIDTH ESPAÇO entre as palavras também. Tendo transformado meus novos conhecimentos em um curtomagia negr performance (entre pessoas do JavaScript), gostaria de perguntar como dividir melhor por todos osaracteres em branco, desde osplit não é o suficiente

>>> u'a\u200bc d'.split()
[u'a\u200bc', u'd']

UPD1

parece a solução sugerida porsth funciona geralmente, mas depende de algumas configurações do SO ou opções de compilação do Python. Seria bom saber com certeza o motivo (e se a configuração pode ser ativada no Windows

UPD2 cptphil encontrou um ótimoligaçã que deixa tudo claro:

Então, entrei em contato com o Comitê Técnico Unicode sobre o problema e recebi uma resposta prontamente. Eles apontaram que o ZWSP era uma vez considerado espaço em branco, mas que foi alterado no Unicode 4.0.1

Uma cotação deunicode site:

Alterando o espaço de largura zero do U + 200B de Zs para Cf (27.10.2003)

Houve problemas persistentes com o uso do espaço de largura zero do U + 200B (ZWSP). A função desse caractere é permitir uma quebra de linha em posições onde normalmente não seria permitido e, portanto, é funcionalmente um caractere de formato com uma categoria geral de Cf. Esse comportamento está bem documentado no padrão Unicode e o caractere não é considerado um caractere de espaço em branco no banco de dados de caracteres Unicode. No entanto, por razões históricas, a categoria geral ainda é Zs (Space Separator), o que faz com que o personagem seja mal utilizado. O ZWSP também é o único caractere Zs que não é espaço em branco. A categoria geral pode causar uma interpretação incorreta do caractere base da regra D13, pois permite o ZWSP como base para combinar marca

proposta é mudar a categoria geral de U + 200B de Zs para Cf.

Resolução: fechada. A categoria geral de U + 200B será alterada de Zs para Cf na versão 4.0.1 Unicode.

A mudança foi refletida em Python. O resultado deu'\u200B'.isspace() no Python 2.5.4 e 2.6.5 éTrue, no Python 2.7.1 já éFalse.

Para outros caracteres espaciais regularessplit basta

>>> u'a\u200Ac'.split()
[u'a', u'c']

E se isso não for suficiente para você, adicione caracteres um por um comoGabi Purcaru sugere abaixo.

questionAnswers(12)

yourAnswerToTheQuestion