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

时间:2015-04-18 17:37:17

标签: python regex unicode tokenize

我遇到了正则表达式标记化和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但它的回答https://stackoverflow.com/a/5028826/1251687也解决了我的问题。

2 个答案:

答案 0 :(得分:2)

字符串必须是unicode。

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

答案 1 :(得分:1)

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

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

编码字节可能意味着取决于所使用的编解码器,它不是特定的Unicode代码点。对于字节字符串(类型str),使用\w时只能匹配ASCII字符。