Форум сайта python.su
>>> cthEn = re.compile(ur“\b.{0,2}(k|c)t?h?ulh?u.{0,2}\b”)
>>> cthEn.search(“cthulhu”)
<_sre.SRE_Match object at 0xb7be3ea0>
>>> cth = re.compile(ur“\b.{0,2}(к|ц)т?улх?у.{0,2}\b”)
>>> cth.search(u“ктулху”)
>>> cth = re.compile(ur“.{0,2}(к|ц)т?улх?у.{0,2}”)
>>> cth.search(u“ктулху”)
<_sre.SRE_Match object at 0xb7be3d20>
как видно, для русского “границы слова” вообще убивают весь поиск. В английском или без границ все нормально. В чем дело, как лечить?
Python 2.5.2, gentoo
Возможно в боолее новых версиях все нормально, но не хочеться ставить маскированные пакеты
import re
cthEn = re.compile(ur"\b.{0,2}(k|c)t?h?ulh?u.{0,2}\b")
print cthEn.search("cthulhu")
#рабочее
cth1 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b")
print cth1.search(u"ктулху")
#не рабочее
cth2 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b")
print cth2.search(u"ктулху")
Отредактировано (Апрель 7, 2009 16:59:22)
Офлайн
я просто думаю почему у тебя u'ктулху' , а не ur'ктулху'…
это просто вопрос , ничего личного
Отредактировано (Апрель 7, 2009 16:41:11)
Офлайн
Интересно зачем?;) У меня же там никаких слешей нету и т.п. Да и результат от этого не поменяется.
Офлайн
>>> cth1 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b", re.U)
>>> print cth1.search(u"ктулху")
<_sre.SRE_Match object at 0x7fe318175288>
Офлайн
ZANКакая версия python-a?>>> cth1 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b", re.U)
>>> print cth1.search(u"ктулху")
<_sre.SRE_Match object at 0x7fe318175288>
Офлайн
Проверял на 2.4 и 2.5. Согласно документации флаг re.U (re.UNICODE) поддерживается, начиная с версии 2.0
Офлайн
странно…. чего ж не пашет у меня =( Ладно. Спасибо за ответ
Офлайн
Хм. Обратите еще раз внимание на re.U
Ни в одном вашем примере этого флага нет.
import re
cthEn = re.compile(ur"\b.{0,2}(k|c)t?h?ulh?u.{0,2}\b")
print cthEn.search("cthulhu")
#рабочее
cth1 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b")
print cth1.search(u"ктулху")
#не рабочее
cth2 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b")
print cth2.search(u"ктулху")
>>> cth1 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b", re.U)
>>> print cth1.search(u"ктулху")
<_sre.SRE_Match object at 0x7fe318175288>
Офлайн