Python Unicode 字符串的正则表达式标记化未按预期工作

Python regex tokenization of Unicode string not working as expected

我遇到了正则表达式标记化和 Unicode 字符串的奇怪问题。

> mystring = "Unicode rägular expressions"
> tokens = re.findall(r'\w+', mystring, re.UNICODE)

这是我得到的:

> print tokens
['Unicode', 'r\xc3', 'gular', 'expressions']

这是我的预期:

> print tokens
['Unicode', 'rägular', 'expressions']

我需要做什么才能获得预期的结果?

更新:这个问题与我的不同: matching unicode characters in python regular expressions But it's answer 也能解决我的问题。

字符串必须是 unicode。

mystring = u"Unicode rägular expressions"
tokens = re.findall(r'\w+', mystring, re.UNICODE)

您有 Latin-1 或 Windows 代码页 1252 字节,而不是 Unicode 文本。解码您的输入:

tokens = re.findall(r'\w+', mystring.decode('cp1252'), re.UNICODE)

根据所使用的编解码器,编码字节可以表示任何含义,它不是特定的 Unicode 代码点。对于字节串(类型str),使用\w.

时只能匹配ASCII字符