我想使用这样的正则表达式从字符串中删除一些字符(字节字符串或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'
有人可以向我解释为什么会这样吗?
谢谢,
彼得
答案 0 :(得分:2)
因为标准(字节)字符串不是Unicode字符串。 Python不知道它是什么编码(或者它甚至根本不是Unicode!),因此无法确定特定的Unicode字符是否与其中的某个字符匹配。解决方案是使用unicode()
函数告诉Python它是Unicode,如你所知。