Я читаю регулярное выражение из файла и вообще не было никаких проблем, пока этот один не пришел:Чтение Regex Character Class Тендерный из файла
^X.{0,2}[\u2E80-\u9FFF] # \u2E80-\u9FFF matches most Chinese and Japanese characters
Регулярное выражение прекрасно работает при компиляции внутри:
p = re.compile(u'^X.{0,2}[\u2E80-\u9FFF]', re.IGNORECASE | re.UNICODE)
print p.search(u'XFlowers for you')
>> none
print p.search(u'X桜桜桜桜')
>> <match object>
, но спецификатор диапазона символов, по-видимому, искажен в процессе импорта, поскольку он соответствует практически всему, начиная с X после этого:
f = codecs.open(filename, "r", "utf-8")
lines = f.read().splitlines()
filePatterns = FileHelper.fileToList(ignoreFile)
patternList = [re.compile(x, re.IGNORECASE | re.UNICODE) for x in ignorePatterns]
for name in [u'XFlowers for you', u'X桜桜桜桜']
for pattern in patternList:
print pattern.search(name):
Это будет соответствовать обеим строкам.
Кто-нибудь знает, как это решить? Спасибо!
только предположение, но я думаю, что кодирование на файл неправильно, попробуйте прочитать его как Юникод или ASCII с ЭСКАТО e sequence – user230910
Я думал, что спецификатор utf-8 принудительно интерпретирует как unicode. Есть ли еще один аспект этого? – Colin