在Python中从输入中去除右到左标记和其他Unicode字符
我正在用Python写一个论坛。我想去掉输入中的一些特殊字符,比如从右到左的标记之类的。有没有什么建议?可能需要用到正则表达式吗?
4 个回答
1
"example".replace(u'\u200e', '')
你可以通过十六进制值来去掉字符,使用 .replace()
方法就可以了。
1
提问者在对另一个回答的评论中,有一个不太容易理解的例子,开头像这样……:
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')
这样做确实会导致提问者在那个难以理解的评论中提到的错误,原因不同:comment
是一个字节字符串(开头没有 u
),而 .encode
是针对unicode 字符串的——所以 Python 首先尝试用默认的编码方式 ascii
将这个字节字符串转换为临时的 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
还是空的)。
1
如果你只是想限制字符串中的字符,让它们只能是某种特定的字符集,你可以把这个字符串用那个字符集进行编码,然后忽略编码时出现的错误:
>>> uc = u'aäöüb'
>>> uc.encode('ascii', 'ignore')
'ab'