正则表达式和Unicode字面量

1 投票
1 回答
604 浏览
提问于 2025-04-17 06:55

我想用正则表达式从一个字符串中去掉一些字符(可以是字节字符串或者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()这个函数,正如你已经发现的那样。

撰写回答