LINUX.ORG.RU

python, re.sub,.re.IGNORECASE, кириллица, не работает


0

1

Собвсно сабж. Как исправить?

In [27]: re.sub("test"+"(?i)",'111','test')
Out[27]: u'111'

In [28]: re.sub("test"+"(?i)",'111','tEsT')
Out[28]: u'111'

In [29]: re.sub("тест"+"(?i)",'111','тест')
Out[29]: u'111'

In [30]: re.sub("тест"+"(?i)",'111','тесТ')
Out[30]: u'\xd1\x82\xd0\xb5\xd1\x81\xd0\xa2'
Регулятри мне по большему счету и не нужны, мне нужна замена подстроки с игнорированием регистра.


>>> u'Asdf ТесТ'.lower().replace( u'тест', '111' )
u'asdf 111'

Не совсем то, но м.б. подойдет?

AIv ★★★★★
()
Ответ на: комментарий от AIv

Это будет план Б.

Задача такая, найти входжение в строке, и выделить его цветом. Т.е. в идеале было бы сохранить регист заменяемого паттерна тоже.

т.е. в идеале д.б. из 'Asdf ТесТ' по паттерну 'тест' получить 'Asdf <b>ТесТ</b>'

т.е. подсветить найденную группу.

swelf
() автор топика
Ответ на: комментарий от true_admin

Это как я понял к 3.0 относится, в нем все работает.

>>> c = re.compile('тест', re.IGNORECASE | re.UNICODE)
>>> a = c.search('Это тест')
>>> print(a.group(0))
тест
>>> a = c.search('Это тесТ')
>>> print(a.group(0))
тесТ
в 2.6 нет
In [92]: a = c.search(u'Это тесТ')

In [93]: a

In [94]: a.group(0)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)

AttributeError: 'NoneType' object has no attribute 'group'

swelf
() автор топика
Ответ на: комментарий от true_admin

И с этим модулем завести не получилось.

swelf
() автор топика

а если так?

$ python
Python 2.7.2 (default, Aug 19 2011, 20:41:43) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> 
>>> text = u"ЭТО ТЕСТОВАЯ СТРОКА"
>>> word = u"тест"
>>> 
>>> c = re.compile(word, re.I+re.U)
>>> _word = c.search(text).group()
>>>
>>> print re.sub(_word, u"уже не тест", text)
ЭТО уже не тестОВАЯ СТРОКА
beka
()
Ответ на: а если так? от beka

Блин, уже столько раз набивал в конфоли эти примеры, что по запаре забыл поставить u перед строками 2мя постами выше, работает, спасибо.

swelf
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.