re.sub使用utf-8字符串的奇怪行为

luk*_*ree 6 python regex encoding

有谁能解释我这种奇怪的行为?我希望两种替换方法可以同时工作或不工作.它只是我还是有人没有发现这是连贯的?

>>> u'è'.replace("\xe0","")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
>>> re.sub(u'è','\xe0','',flags=re.UNICODE)
''
Run Code Online (Sandbox Code Playgroud)

(请注意,我不是要求解释为什么u'è'.replace("\ xe0","")引发错误!)

sub*_*iet 2

来自Unicode 文档

\n\n
\n

这些方法的参数可以是 Unicode 字符串或 8 位字符串。8位字符串在执行操作之前将被转换为Unicode;Python\xe2\x80\x99s 默认会使用 ASCII 编码,因此大于 127 的字符会引发异常

\n
\n\n

来自重新文档

\n\n
\n

该模块提供类似于 Perl 中的正则表达式匹配操作。要搜索的模式和字符串都可以是 Unicode 字符串以及 8 位字符串。

\n
\n\n

由于对于 Re 模块,您没有显式指定 Unicode 标志,因此它不会尝试转换,因此不会引发错误。这就是为什么他们的行为不连贯

\n