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}
Что можно здесь придумать?