我正在用 Python 写一个论坛。我想删除包含从右到左标记之类的输入。建议?可能是正则表达式?
4 回答
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首先尝试使用默认编解码器从该字节串中制作一个临时unicode,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')
在这里,第二条语句使用似乎适用于本示例的编解码器显式构建 unicode(当然,这只是一个猜测:您不能确定仅看到裸字节串就应该应用哪个编解码器!-),然后第三个再次删除所有非 ascii 字符(并再次comment
留空)。
如果您只是想将字符限制为某个字符集的字符,则可以在该字符集中对字符串进行编码,而忽略编码错误:
>>> uc = u'aäöüb'
>>> uc.encode('ascii', 'ignore')
'ab'
很难猜出要从 Unicode 字符串中删除的字符集。难道他们都是“<a href="http://www.fileformat.info/info/unicode/category/Cf/list.htm" rel="nofollow noreferrer">其他,格式”字符?如果是,您可以这样做:
import unicodedata
your_unicode_string= filter(
lambda c: unicodedata.category(c) != 'Cf',
your_unicode_string)
"example".replace(u'\u200e', '')
您可以使用方法通过十六进制值删除字符.replace()
。