Найти - Пользователи
Полная версия: Подсветка подстроки с помощью rexexp
Начало » Python для новичков » Подсветка подстроки с помощью rexexp
1
to_night
Есть список подстрок, необходимо сделать подсветку искомой подстроки. Делаю с помощью 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}

Что можно здесь придумать?
py.user.next
>>> 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}']
>>>
to_night
Отлично работает. Спасибо.
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