正则表达式和unicode文字

时间:2011-11-23 16:08:49

标签: python regex unicode unicode-literals

我想使用这样的正则表达式从字符串中删除一些字符(字节字符串或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 个答案:

答案 0 :(得分:2)

因为标准(字节)字符串不是Unicode字符串。 Python不知道它是什么编码(或者它甚至根本不是Unicode!),因此无法确定特定的Unicode字符是否与其中的某个字符匹配。解决方案是使用unicode()函数告诉Python它是Unicode,如你所知。