我遇到了正则表达式标记化和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也解决了我的问题。
答案 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字符。