Python - 错误的编码,正则表达式

时间:2016-05-24 22:42:08

标签: python regex utf-8

我有波兰语的文字,我想过滤掉非波兰语字母,但问题是波兰语特定字母消失了

# coding: utf-8
import re

_NOT_LETTERS = re.compile('[^a-ząćęłóńśżź]+')

text = u'dzień dobry i wszystkiego najlepszego życzę'

data = _NOT_LETTERS.sub(' ', text)

print data

,结果是

 dzie dobry i wszystkiego najlepszego ycz 

而非预期

dzień dobry i wszystkiego najlepszego życzę

我该如何解决这个问题?我从第三方库收到变量文本

1 个答案:

答案 0 :(得分:1)

重音字母不在ascii范围内,并且在以UTF-8编码时需要几个字节,例如字符:

U+0144  ń       LATIN SMALL LETTER N WITH ACUTE

以两个字节编码:c5 84

当您编写字符串而未指定它是具有多字节字符的字符串时,每个字节都被视为字符(字符\xc5和字符\x84但不是字符{{1无法识别的(U + 0144)。)

在Python 2.7中,您需要指定您的字符串是一个unicode字符串,否则所有多字节字符都被视为单个字节。您可以自己编写测试:

ń

找不到字符,因为您的模式不在主题字符串之类的unicode字符串中。你需要写:

>>> text = u'dzień'
>>> [c for c in text]
[u'd', u'z', u'i', u'e', u'\u0144']

>>> text = 'dzień'
>>> [c for c in text]
['d', 'z', 'i', 'e', '\xc5', '\x84']