Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-错误的编码,regexp_Python_Regex_Utf 8 - Fatal编程技术网

Python-错误的编码,regexp

Python-错误的编码,regexp,python,regex,utf-8,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 najlepsz

我有一个波兰语文本,我想过滤掉非波兰语字母,但问题是波兰语字母消失了

# 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ę

我怎样才能解决这个问题?我从第三方库接收变量文本,重音字母不在ascii范围内,在UTF-8编码时需要几个字节,例如字符:

U+0144  ń       LATIN SMALL LETTER N WITH ACUTE
按两个字节编码:
C584

当您写入一个字符串而不指定它是一个包含多字节字符的字符串时,每个单字节都被视为一个字符(字符
\xc5
和字符
\x84
,但不是无法识别的字符
ń
(U+0144))

在Python2.7中,需要指定字符串是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']
找不到字符,因为您的模式与主题字符串不同,不在unicode字符串中。你需要写:

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

模式也必须使用unicode字符串:
re.compile(u'[^a-ząćęłóśżź]+')
否则多字节字符被视为分离字节(即:一个字节,一个字符)。很好,它可以工作。如果你想加一个答案,我会接受的