Python: разбиение строки по всем пробелам

Чтобы разбить строки по пробелам в Python, обычно используетсяsplit метод строки без параметров:

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

Но вчера я наткнулся на строку, которая использовалаНОЛЬ ПРОСТРАНСТВА между словами. Превратив мои новые знания в короткиечерная магия производительность (среди людей JavaScript), я хотел бы спросить, как лучше разделить на всехпробельные символы, так какsplit недостаточно:

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

UPD1

кажется, решение, предложенноеsth в общем случае работает, но зависит от некоторых настроек ОС или параметров компиляции Python. Было бы неплохо знать причину наверняка (и если настройка может быть включена в Windows).

UPD2 cptphil нашел отличныйссылка это проясняет все:

Поэтому я связался с Техническим комитетом Unicode по этому вопросу и получил быстрый ответ. Они указали, что ZWSP когда-то считался пробелом, но это изменилось в Unicode 4.0.1

Цитата изЮникод сайт:

Изменение пространства нулевой ширины U + 200B с Zs на Cf (2003.10.27)

Постоянно возникали проблемы с использованием пространства нулевой ширины U + 200B (ZWSP). Функция этого символа состоит в том, чтобы разрешить разрыв строки в местах, где это обычно не допускается, и, таким образом, функционально является символом формата с общей категорией Cf. Это поведение хорошо документировано в Стандарте Юникода, и этот символ не считается пробельным символом в Базе данных символов Юникода. Однако по историческим причинам общая категория по-прежнему Zs (разделитель пробелов), что приводит к неправильному использованию символа. ZWSP также является единственным символом Zs, который не является пробелом. Общая категория может привести к неправильной интерпретации правила D13 Базовый символ, поскольку допускается использование ZWSP в качестве основы для объединения меток.

Предложение состоит в том, чтобы изменить общую категорию U + 200B с Zs на Cf.

Разрешение: Закрыто. Общая категория U + 200B будет изменена с Zs на Cf в Unicode версии 4.0.1.

Изменение было отражено в Python. Результатu'\u200B'.isspace() в Python 2.5.4 и 2.6.5 естьTrueв Python 2.7.1 это ужеFalse.

Для других символов пространства обычныеsplit достаточно:

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

И если этого вам недостаточно, добавьте символы один за другим, какGabi Purcaru предлагает ниже.

Ответы на вопрос(6)

Ваш ответ на вопрос