我有波兰语的文字,我想过滤掉非波兰语字母,但问题是波兰语特定字母消失了
# 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ę
我该如何解决这个问题?我从第三方库收到变量文本
答案 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']