Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 6, 2009 21:14:51

Imposeren
От:
Зарегистрирован: 2009-04-06
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Unicode регулярные выражения и границы слова

>>> 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)

Офлайн

#2 Апрель 7, 2009 16:39:45

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Unicode регулярные выражения и границы слова

я просто думаю почему у тебя u'ктулху' , а не ur'ктулху'…
это просто вопрос , ничего личного

Отредактировано (Апрель 7, 2009 16:41:11)

Офлайн

#3 Апрель 7, 2009 16:57:48

Imposeren
От:
Зарегистрирован: 2009-04-06
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Unicode регулярные выражения и границы слова

Интересно зачем?;) У меня же там никаких слешей нету и т.п. Да и результат от этого не поменяется.



Офлайн

#4 Апрель 7, 2009 22:22:24

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Unicode регулярные выражения и границы слова

>>> cth1 = re.compile(ur"\b.{0,2}(к|ц)т?улх?у.{0,2}\b", re.U)
>>> print cth1.search(u"ктулху")
<_sre.SRE_Match object at 0x7fe318175288>



Офлайн

#5 Апрель 7, 2009 22:23:33

Imposeren
От:
Зарегистрирован: 2009-04-06
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Unicode регулярные выражения и границы слова

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?



Офлайн

#6 Апрель 7, 2009 22:33:51

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Unicode регулярные выражения и границы слова

Проверял на 2.4 и 2.5. Согласно документации флаг re.U (re.UNICODE) поддерживается, начиная с версии 2.0



Офлайн

#7 Апрель 7, 2009 22:39:44

Imposeren
От:
Зарегистрирован: 2009-04-06
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Unicode регулярные выражения и границы слова

странно…. чего ж не пашет у меня =( Ладно. Спасибо за ответ



Офлайн

#8 Апрель 7, 2009 22:44:26

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Unicode регулярные выражения и границы слова

Хм. Обратите еще раз внимание на 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>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version