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

问题描述 投票:0回答:4

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

python unicode right-to-left
4个回答
0
投票

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

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

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 string - 所以Python首先尝试使用默认编解码器ascii从该bytestring中创建一个临时unicode,当然这会失败,因为字符串中充满了非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')

在这里,第二个语句使用似乎适用于此示例的编解码器显式构建unicode(当然只是一个猜测:您无法确定哪个编解码器应该只是看到一个裸字节串!),然后第三个,再次,删除所有非ascii字符(并再次留下comment空)。


0
投票

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

import unicodedata

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

0
投票
"example".replace(u'\u200e', '')

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

© www.soinside.com 2019 - 2024. All rights reserved.