正则表达式和Unicode字面量
我想用正则表达式从一个字符串中去掉一些字符(可以是字节字符串或者Unicode字符串),像这样:
pattern = re.compile(ur'\u00AE|\u2122', re.UNICODE)
如果这些字符是用Unicode字面量指定的,那么生成的正则表达式在字节字符串上就不能正常工作。
q = 'Canon\xc2\xae EOS 7D'
pattern.sub('', q) # 'Canon\xc2 EOS 7D'
不过,如果我把替换的参数转换成Unicode字符串,它就能按预期工作了……
pattern.sub('', unicode(q)) # u'Canon EOS 7D'
有人能告诉我这是为什么吗?
谢谢,
彼得
1 个回答
2
因为标准的(字节)字符串不是Unicode字符串。Python不知道这个字符串用的是什么编码(甚至不知道它是否是Unicode字符串!),所以它无法判断某个Unicode字符是否和这个字符串里的某个字符相匹配。解决这个问题的方法就是告诉Python这个字符串是Unicode格式的,可以使用unicode()
这个函数,正如你已经发现的那样。