Найти - Пользователи
Полная версия: Unicode регулярные выражения и границы слова
Начало » Python для экспертов » Unicode регулярные выражения и границы слова
1
Imposeren
>>> 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"ктулху")
sypper-pit
я просто думаю почему у тебя u'ктулху' , а не ur'ктулху'…
это просто вопрос , ничего личного
Imposeren
Интересно зачем?;) У меня же там никаких слешей нету и т.п. Да и результат от этого не поменяется.
ZAN
>>> cth1 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b", re.U)
>>> print cth1.search(u"ктулху")
<_sre.SRE_Match object at 0x7fe318175288>
Imposeren
ZAN
>>> cth1 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b", re.U)
>>> print cth1.search(u"ктулху")
<_sre.SRE_Match object at 0x7fe318175288>
Какая версия python-a?
ZAN
Проверял на 2.4 и 2.5. Согласно документации флаг re.U (re.UNICODE) поддерживается, начиная с версии 2.0
Imposeren
странно…. чего ж не пашет у меня =( Ладно. Спасибо за ответ
ZAN
Хм. Обратите еще раз внимание на 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>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB