2016-09-19 1 views
0

У меня есть несколько строк из примерно 100 символов, и мне нужно определить, содержит ли каждая строка символ юникода. Конечная цель - проверить, присутствует ли какая-либо конкретная emojis, но изначально мне нужен фильтр, который ловит все emojis (а также потенциально другие специальные символы). Этот метод должен быть быстрым.Проверка, содержит ли строка unicode с использованием стандартного Python

Я видел Python regex matching Unicode properties, но я не могу использовать какие-либо пользовательские пакеты. Я использую Python 2.7. Благодаря!

+1

** Все символы ** являются символами Юникода. Простым тестом будет 'if string:'; просто проверьте непустые строки. Любой символ, который Python может помещать в строку, является частью стандарта Unicode. –

+0

Возможно, вы хотели проверить наличие * не-ASCII-кодовых точек * или что-то подобное? –

+0

Вы просто проверяете эмоции? Технически все символы ASCII также присутствуют в юникоде, поэтому вам нужно быть немного более конкретным, когда вы говорите, что вы «проверяете символы Unicode». –

ответ

1

Нет смысла тестировать «если строка содержит символы Юникода», потому что все символы являются символами Юникода. Стандарт Unicode охватывает все кодовые точки, поддерживаемые Python, включая диапазон ASCII (коды Unicode с U + 0000 до U + 007F).

Если вы хотите проверить Emoji кода, тестирования для определенных диапазонов, как указано в Unicode Emoji class specification:

re.compile(
    u'[\u231A-\u231B\u2328\u23CF\23E9-\u23F3...\U0001F9C0]', 
    flags=re.UNICODE) 

, где вы должны выбрать то, что вы кодовые считают Emoji. Я лично не включил бы U+0023 NUMBER SIGN в эту категорию, например, но, по-видимому, стандарт Unicode делает.

Примечание. Чтобы быть явным, указанное выше выражение не является полным. В категории Emoji есть 209 отдельных записей, и мне не хотелось писать их все.

Другое примечание: в приведенном выше примере используется escape-последовательность Unicode \Uhhhhhhhh; его использование поддерживается только в шаблоне regex в Python 3.3 и выше или в wide (UCS-4) build для более ранних версий Python. Для узкой сборки Python вам понадобится match on surrogate pairs для кодовых страниц по U + FFFF.

+0

Спасибо, это имеет смысл. Теперь, если я хочу только сделать грубую версию, которая ловит все emojis, но также и другие строки, будет «возвращать» \ 'в mystr' при некотором кодировании строки, которая будет показывать все эти обратные косые черты, а затем работать? – pir

+0

Я нахожусь в Python 2.7 – pir

+0

@pir: в строках нет обратных косых черт; вы не можете тестировать escape-последовательности, потому что escape-последовательности - это просто способ упростить определение определенного кодового пункта. –

Смежные вопросы