1

我想使用这样的正则表达式从字符串(字节字符串或 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'

有人可以向我解释为什么会这样吗?

谢谢,

彼得

4

1 回答 1

2

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

于 2011-11-23T16:28:03.583 回答