Удаление метки справа налево и других символов Юникода из ввода в Python - PullRequest
0 голосов
/ 01 июня 2010

Я пишу форум на Python. Я хочу убрать ввод, содержащий метку справа налево и тому подобное. Предложения? Возможно регулярное выражение?

Ответы [ 4 ]

1 голос
/ 01 июня 2010

ОП в трудном для чтения комментарии к другому ответу имеет пример, который начинается следующим образом ...:

comment = comment.encode('ascii', 'ignore')
comment = '\xc3\xa4\xc3\xb6\xc3\xbc'

Это, конечно, с двумя операторами в этом порядке, было бы другой ошибкой (первый пытается получить доступ к comment, но только второе связывает это имя), но давайте предположим, что две строки взаимозаменяемы, так как следующим образом:

comment = '\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.encode('ascii', 'ignore')

Это, которое действительно может привести к ошибке, которую OP, по-видимому, имеет в этом трудном для чтения комментарии, является проблемой по другой причине: comment - это строка байтов (без начального u перед открывающей кавычкой) ), но .encode применяется к строке unicode - поэтому Python в первую очередь пытается создать временный юникод из этой строки с помощью кодека по умолчанию ascii, и это, конечно, не удается, поскольку строка содержит символы не ascii.

Вставка ведущего u в этот литерал будет работать:

comment = u'\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.encode('ascii', 'ignore')

(это, конечно, оставляет comment пустым, поскольку все его символов игнорируются). В качестве альтернативы - например, если исходная строка байтов исходит из другого источника, а не из литерала:

comment = '\xc3\xa4\xc3\xb6\xc3\xbc'
comment = comment.decode('latin-1')
comment = comment.encode('ascii', 'ignore')

здесь, второе утверждение явно строит юникод с кодеком, который кажется применимым к этому примеру (конечно, только предположение: вы не можете с уверенностью сказать, какой кодек должен применяться из простого просмотра пустой строки! - ), затем третий снова удаляет все символы, не относящиеся к ascii (и снова оставляет comment пустым).

0 голосов
/ 13 сентября 2018
"example".replace(u'\u200e', '')

Вы можете удалить символы по шестнадцатеричным значениям с помощью метода .replace().

0 голосов
/ 26 июня 2010

Трудно угадать набор символов, который вы хотите удалить из строк Unicode. Может быть, это все символы « Other, Format »? Если да, вы можете сделать:

import unicodedata

your_unicode_string= filter(
    lambda c: unicodedata.category(c) != 'Cf',
    your_unicode_string)
0 голосов
/ 01 июня 2010

Если вы просто хотите ограничить символы определенным набором символов, вы можете закодировать строку в этом наборе символов и просто игнорировать ошибки кодирования:

>>> uc = u'aäöüb'
>>> uc.encode('ascii', 'ignore')
'ab'
...