Bug 5262 - модуль re: буква ё почему-то не входит в диапазон [а-я]
Summary: модуль re: буква ё почему-то не входит в диапазон [а-я]
Status: CLOSED WORKSFORME
Alias: None
Product: Sisyphus
Classification: Development
Component: python-base (show other bugs)
Version: unstable
Hardware: all Linux
: P2 major
Assignee: Andrey Orlov
QA Contact: Fr. Br. George
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-09-30 13:14 MSD by Renat Sabitov
Modified: 2019-07-22 09:25 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Renat Sabitov 2004-09-30 13:14:32 MSD
if re.search('([^а-я])', 'ё').group(1) != None:
   print "Error"
Comment 1 Renat Sabitov 2004-09-30 13:16:50 MSD
Сорри не так

if re.search('([^а-я])', 'ё') != None:
   print "Error"
Comment 2 Andrey Orlov 2004-09-30 18:18:19 MSD
Если вы не включимли локаль, то она туда действительно не входит. 
А если вы включили локаль то все работает. Пример следует. 
 
 
18:18:58 (cray@fire)  /home/cray/.home>  python 
Python 2.3.3 (#1, Jul  3 2004, 17:16:23) 
[GCC 3.3.3 20040412 (ALT Linux, build 3.3.3-alt5)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import re 
>>> import locale 
>>> locale.setlocale(0,"ru_RU.KOI8-R") 
'ru_RU.KOI8-R' 
>>> re.search('([^а-я])', 'ё').group(1) 
'\xa3' 
>>> print re.search('([^а-я])', 'ё').group(1) 
ё 
>>> map(ord,"аёя") 
[193, 163, 209] 
>>> 
 
 
 
 
 
Comment 3 Renat Sabitov 2004-10-01 10:30:54 MSD
Не все так просто. Наверное я неправильно написал пример. В своей программе я
использовал unicode, думаю на строки в этой кодировке не должны распространяться
проблемы локали. Если же должны, то какую локаль мне поставить?

>>> a = unicode ("[а-я]", "koi8-r");
>>> b = unicode ("ё", "koi8-r");
>>> re.compile (a, re.U ).match(b)
>>> re.compile (a, re.U).match(unicode("е", "koi8-r"))
<_sre.SRE_Match object at 0x403c68e0>


>>> locale.setlocale(0,"ru_RU.KOI8-R")
'ru_RU.KOI8-R'
>>> a = unicode ("[а-я]", "koi8-r");
>>> b = unicode ("ё", "koi8-r");
>>> re.compile (a, re.U).match(b)
>>> re.compile (a, re.U).match(unicode("е", "koi8-r"))
<_sre.SRE_Match object at 0x403c62f8>
Comment 4 Andrey Orlov 2004-11-03 02:30:56 MSK
> Не все так просто. Наверное я неправильно написал пример. В своей программе я 
 
Нет, это я неправильно ответил. Причем совсем неправильно - мой пример 
подтверждает вашу правоту, а не мою. Видимо, я перегрелся тогда, извините. 
 
Похоже на то, что модуль sre забивает на локализацию диапазонов. Баг это или 
фича - нужно разбираться. Локаль модуль учитывает только при расширении 
макросов: (\w и т.п.), я попробую провентилировать вопрос. 
 
 
 
Comment 5 Michael Shigorin 2007-03-14 12:33:13 MSK
reassign
Comment 6 Fr. Br. George 2007-03-14 20:50:50 MSK
В документации по re нигде не сказано, что LOCALE влияет на диапазоны вида [а-я].
Более того, опыт показывает, что дмапазон _всегда_ строится по _кодам_ символов,
а не по LOCALE, которое влияет только на \w и пободных ему.

Так что это, увы, фича. Видимо, предполагается, что конструкции вида [ж-х] в
real life бессмысленны, множества типа гласные/согласные лучше всё-таки задавать
перечислением, а иметь возможность работать с _кодом_ символа в различных
кодировках тоже хочется.

Предлагаю багу закрыть.
Comment 7 Michael Shigorin 2008-02-15 22:53:07 MSK
re
Comment 8 Michael Shigorin 2008-02-15 22:53:36 MSK
worksforme
Comment 9 Andrew Goethe 2019-07-22 09:25:38 MSK
Bug is an error and the issue which prevail in the system and the file due to viral and the viral component attack as well. The bug is creating the reason of making the https://www.australian-writings.net/ by writing the debut making situation.