Как я могу получить все пробелы в 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».

  • Python DictWriter записывает CSV-файлы с кодировкой UTF-8
  • Почему этот HTML-шаблон на jinja2 / python создает ошибку 'u ()' tuple при замене строк?
  • Строки Python и кодирование и декодирование str ()
  • В Python, как наиболее эффективно вырезать строку UTF-8 для доставки REST?
  • Сделать utf8 доступным для чтения в файле
  • Правильное чтение текста из файла Windows-1252 (cp1252) в python
  • Декодирование с двойной кодировкой utf8 в Python
  • Декодирование, если это не unicode
  • печать UTF-8 в Python 3 с использованием Sublime Text 3
  • Проблемы с записью скребковых данных в csv со славянскими символами (UnicodeEncodeError & TypeError)
  • Преобразовать каждое значение словаря в utf-8 (понимание словаря?)
  • Python - лучший язык программирования в мире.