Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 23, 2015 16:18:02

to_night
От: Киев
Зарегистрирован: 2013-12-12
Сообщения: 58
Репутация: +  1  -
Профиль   Отправить e-mail  

Подсветка подстроки с помощью rexexp

Есть список подстрок, необходимо сделать подсветку искомой подстроки. Делаю с помощью regexp:

import re
text_list = [u"spam ham jam spamer", u"spam"]
pattern = re.compile(ur"(\bspam\w*)", re.I | re.U)
start_str = u'{start}'
end_str = u'{end}' 
out = []
for item in text_list:
    for match in re.finditer(pattern, item):
        out.append(u"".join(
            [item[0:match.start()],
             start_str, item[match.start():match.end()], end_str,
             item[match.end():]]))
for i in out:
    print i

Проблема в том, что если в строке встречается несколько одинаковых подстрок, то они все по-отдельности добaвляются в out:

{start}spam{end} ham jam spamer
spam ham jam {start}spamer{end}
{start}spam{end}

а нужно, чтобы получалась строка со всеми обернутыми построками:

{start}spam{end} ham jam {start}spamer{end}
{start}spam{end}

Что можно здесь придумать?

Отредактировано to_night (Фев. 23, 2015 16:18:40)

Офлайн

#2 Фев. 23, 2015 18:20:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Подсветка подстроки с помощью rexexp

>>> import re
>>> 
>>> text_list = [u"spam ham jam spamer", u"spam"]
>>> pattern = re.compile(ur"\bspam\w*", re.I | re.U)
>>> 
>>> start_str = u'{start}'
>>> end_str = u'{end}' 
>>> 
>>> tr = lambda m: start_str + m.group() + end_str
>>> 
>>> out = [pattern.sub(tr, t) for t in text_list]
>>> out
[u'{start}spam{end} ham jam {start}spamer{end}', u'{start}spam{end}']
>>>



Отредактировано py.user.next (Фев. 23, 2015 18:22:04)

Офлайн

#3 Фев. 24, 2015 08:25:30

to_night
От: Киев
Зарегистрирован: 2013-12-12
Сообщения: 58
Репутация: +  1  -
Профиль   Отправить e-mail  

Подсветка подстроки с помощью rexexp

Отлично работает. Спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version