我有这个密码
import chardet, re
content = "Бланк свидетельства о допуске."
print content
print chardet.detect(content)
content = re.sub(u"(?i)[^-0-9a-zа-яё«»\&\;\/\<\>\.,\s\(\)\*:!\?]", "", content)
print content
print chardet.detect(content)
和输出
^{pr2}$我做错什么了?如何在re.sub()
之后获得uft-8字符串?
{Pyutf,Pyutf中的}(Pyutf,Pyutf中的。在
谢谢。在
这就是(我认为)您要实现的目标(为了清晰起见,我简化了regexp):
注意要点:
(?u)
来进行大小写折叠。在另外,对于严肃的unicode工作,我建议使用regex模块,它提供了极好的几乎完全的unicode支持。考虑:
^{2}$虽然
re.UNICODE
只改变\w
和朋友,但在我的测试中,它也会影响大小写折叠(re.IGNORECASE
):所以这要么是一个未记录的特性,要么是文档问题。在
您的输入是UTF-8:
但是您使用的是一个unicode正则表达式。表达式直接匹配 UTF-8输入的原始字节。在
在所有这些字节中,只有空格、句号和
\xbb
字节(作为»
字符)不会被删除。其余的单个字节将被删除,因为它们不属于负字符类[^...]
。在正确使用Unicode(首先将
^{2}$content
解码为Unicode)可以:另一种方法是对正则表达式使用原始字节字符串,并匹配字节组合。计算UTF-8字节和范围的有效性是非常困难的。您需要完全理解UTF-8 encodes characters to multiple bytes,然后将负字符类转换为允许通过相同字节组合的一组正匹配。这对胆小的人来说不是。在
相关问题 更多 >
编程相关推荐