0

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

4

4 回答 4

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首先尝试使用默认编解码器从该字节串中制作一个临时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留空)。

于 2010-06-01T01:04:23.070 回答
0

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

>>> uc = u'aäöüb'
>>> uc.encode('ascii', 'ignore')
'ab'
于 2010-06-01T00:45:14.530 回答
0

很难猜出要从 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)
于 2010-06-26T08:00:05.553 回答
0
"example".replace(u'\u200e', '')

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

于 2018-09-13T17:56:49.627 回答