从Python中的输入中删除从右到左标记和其他unicode字符

时间:2010-06-01 00:34:46

标签: python unicode right-to-left

我正在用Python编写论坛。我想删除包含从右到左标记的输入和类似的东西。建议?可能是一个正则表达式?

4 个答案:

答案 0 :(得分:1)

OP在另一个答案的难以阅读的评论中有一个例子似乎开始......:

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首先尝试使用默认编解码器{{1}从该字节串中生成临时unicode那当然失败了,因为字符串中充满了非ascii字符。

在该文字中插入前导ascii将起作用:

u

(这当然会使comment = u'\xc3\xa4\xc3\xb6\xc3\xbc' comment = comment.encode('ascii', 'ignore') 为空,因为其所有字符都会被忽略)。或者 - 例如,如果原始字节字符串来自某个其他来源,而不是文字:

comment

这里,第二个语句用一个似乎适用于这个例子的编解码器显式构建unicode(当然只是一个猜测:你无法确定哪个编解码器应该只是看到一个裸字节串!) ),然后第三个删除所有非ascii字符(并再次将comment = '\xc3\xa4\xc3\xb6\xc3\xbc' comment = comment.decode('latin-1') comment = comment.encode('ascii', 'ignore') 留空)。

答案 1 :(得分:0)

如果您只想将字符限制为某个字符集的字符,则可以对该字符集中的字符串进行编码,然后忽略编码错误:

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

答案 2 :(得分:0)

很难猜出要从Unicode字符串中删除的字符集。可能是他们都是“Other, Format”字符吗?如果是,您可以这样做:

import unicodedata

your_unicode_string= filter(
    lambda c: unicodedata.category(c) != 'Cf',
    your_unicode_string)

答案 3 :(得分:0)

"example".replace(u'\u200e', '')

您可以使用.replace()方法按十六进制值删除字符。