Как я могу получить все пробелы в UTF-8 в Python?

Возможный дубликат:
В Python, как перечислять все символы, соответствующие расширенному регулярному выражению POSIX `[: space:]`?

Как я могу получить список всех пробелов в UTF-8 в Python? В том числе неразрывное пространство и т. Д. Я использую python 2.7.

3 Solutions collect form web for “Как я могу получить все пробелы в UTF-8 в Python?”

unicodedata.category сообщит вам код категории для любого заданного символа; символы, которые вы хотите, имеют код Zs . Кажется, что нет никакого способа извлечь список символов в пределах категории, кроме как итерации по всем из них:

 >>> for c in xrange(sys.maxunicode+1): ... u = unichr(c) ... if unicodedata.category(u) == 'Zs': ... sys.stdout.write("U+{:04X} {}\n".format(c, unicodedata.name(u))) ... U+0020 SPACE U+00A0 NO-BREAK SPACE U+1680 OGHAM SPACE MARK U+180E MONGOLIAN VOWEL SEPARATOR U+2000 EN QUAD U+2001 EM QUAD U+2002 EN SPACE U+2003 EM SPACE U+2004 THREE-PER-EM SPACE U+2005 FOUR-PER-EM SPACE U+2006 SIX-PER-EM SPACE U+2007 FIGURE SPACE U+2008 PUNCTUATION SPACE U+2009 THIN SPACE U+200A HAIR SPACE U+202F NARROW NO-BREAK SPACE U+205F MEDIUM MATHEMATICAL SPACE U+3000 IDEOGRAPHIC SPACE 

Вы также можете включить категории Zl и Zp , что добавляет

 U+2028 LINE SEPARATOR U+2029 PARAGRAPH SEPARATOR 

И вы почти наверняка хотите включить все управляющие символы ASCII, которые обычно считаются пустыми – по историческим причинам (я полагаю), они относятся к категории Cc .

 U+0009 CHARACTER TABULATION ('\t') U+000A LINE FEED (LF) ('\n') U+000B LINE TABULATION ('\v') U+000C FORM FEED (FF) ('\r') U+000D CARRIAGE RETURN (CR) ('\f') 

Остальные 60 с лишним символов Cc не должны считаться пробелами, даже если их официальное название звучит так, будто они являются пробелами. Например, U+0085 NEXT LINE почти никогда не встречается в дикой природе с ее официальным значением; это гораздо более вероятно, будет результатом ошибочного преобразования из Windows-1252 в UTF-8 U+2026 HORIZONTAL ELLIPSIS .

Близкий вопрос: «Что соответствует \s в регулярном выражении Python?» Опять же, лучший доступный способ ответить на этот вопрос – перебрать все символы:

 >>> s = re.compile(ru"^\s$", re.UNICODE) >>> for c in range(sys.maxunicode+1): ... u = unichr(c) ... if s.match(u): ... sys.stdout.write("U+{:04X} {}\n".format( ... c, unicodedata.name(u, "<name missing>"))) U+0009 <name missing> U+000A <name missing> U+000B <name missing> U+000C <name missing> U+000D <name missing> U+001C <name missing> U+001D <name missing> U+001E <name missing> U+001F <name missing> U+0020 SPACE U+0085 <name missing> U+00A0 NO-BREAK SPACE U+1680 OGHAM SPACE MARK U+2000 EN QUAD U+2001 EM QUAD U+2002 EN SPACE U+2003 EM SPACE U+2004 THREE-PER-EM SPACE U+2005 FOUR-PER-EM SPACE U+2006 SIX-PER-EM SPACE U+2007 FIGURE SPACE U+2008 PUNCTUATION SPACE U+2009 THIN SPACE U+200A HAIR SPACE U+2028 LINE SEPARATOR U+2029 PARAGRAPH SEPARATOR U+202F NARROW NO-BREAK SPACE U+205F MEDIUM MATHEMATICAL SPACE U+3000 IDEOGRAPHIC SPACE 

(Я не знаю, почему unicodedata.name не знает имена управляющих символов.)

Это все символы Z* , все символы Cc , которые обычно считаются пустыми, и пять дополнительных символов, которые обычно не согласованы как пробелы, U + 001C, U + 001D, U + 001E, U + 001F , и U + 0085. Включение последней группы – ошибка, но в значительной степени безвредная, поскольку использование этих символов для чего-либо также является ошибкой.

Категория Zs может быть недостаточной:

 #!/usr/bin/env python import sys import unicodedata import regex # $ pip install regex for i in xrange(sys.maxunicode + 1): u = unichr(i) if regex.match(u"[[:space:]]", u): try: name = unicodedata.name(u) except ValueError: name = "" print("{:9s} {} {}".format(repr(u), unicodedata.category(u), name)) 

Вывод

 u'\t' Cc u'\n' Cc u'\x0b' Cc u'\x0c' Cc u'\r' Cc u' ' Zs SPACE u'\x85' Cc u'\xa0' Zs NO-BREAK SPACE u'\u1680' Zs OGHAM SPACE MARK u'\u180e' Zs MONGOLIAN VOWEL SEPARATOR u'\u2000' Zs EN QUAD u'\u2001' Zs EM QUAD u'\u2002' Zs EN SPACE u'\u2003' Zs EM SPACE u'\u2004' Zs THREE-PER-EM SPACE u'\u2005' Zs FOUR-PER-EM SPACE u'\u2006' Zs SIX-PER-EM SPACE u'\u2007' Zs FIGURE SPACE u'\u2008' Zs PUNCTUATION SPACE u'\u2009' Zs THIN SPACE u'\u200a' Zs HAIR SPACE u'\u2028' Zl LINE SEPARATOR u'\u2029' Zp PARAGRAPH SEPARATOR u'\u202f' Zs NARROW NO-BREAK SPACE u'\u205f' Zs MEDIUM MATHEMATICAL SPACE u'\u3000' Zs IDEOGRAPHIC SPACE 

Список символов космического пространства в базе данных юникода определяется категорией «Zs»:

http://www.fileformat.info/info/unicode/category/Zs/list.htm

Я не уверен, есть ли функциональность в модуле unicodedata Python. Я сомневаюсь: вы можете просмотреть всех персонажей и проверить свою категорию против «Zs».

  • UnicodeDecodeError: кодек ascii не может декодировать байт 0xd1 в позиции 2: порядковый номер не в диапазоне (128)
  • Как читать файлы UTF-8 с помощью Pandas?
  • Python Undo Unicode Question
  • Преобразование из utf-16 в utf-8 в Python 3
  • Проблема с кодировкой при загрузке HTML с использованием mechanize и Python 2.6
  • Почему Python не отобразит этот текст правильно? (Проблема декодирования UTF-8)
  • python - преобразование двоичных данных в utf-8
  • Проблемы с Python в Google App Engine - UTF-8 и ASCII
  •  
    Interesting Posts for Van-Lav

    str на время в python

    «Питонический» эквивалент для обработки переключателя и нескольких строк сравнения

    Существует ли официальный или общеизвестный стандарт минимального интерфейса для «списка»?

    Создание словаря из структуры каталогов

    Как заставить рабочие потоки прекратить работу после завершения работы в многопоточном шаблоне производителя-потребителя?

    Каков наилучший способ доступа к хранимым процедурам в ORM Django?

    setup.py для пакетов, которые зависят как от cython, так и от f2py

    Соответствующее значение max_packets для функции цикла MQTT

    Файл .py, который скомпилирован из файла .qrc (с использованием pyside-rcc), не работает

    Django, перенаправить всех неидентифицированных пользователей на целевую страницу

    Сериализация памяти Python

    как обойти «Single»} «встречается в строке формата» при использовании .format и форматировании в печати

    Почему Python настолько медленный для простого цикла?

    Являются ли номера ошибок Python связанными с IOError стабильными?

    Читать изображение grayscale opencv 3.0.0-dev

    Python - лучший язык программирования в мире.