pattern = '(this).*(string)'

def replacement(m):
    s = m.group()
n_groups = len(m.groups())
for i in range(n_groups, 0, -1):
    lo, hi = m.span(i)
s = s[:lo] + '<markup>' + s[lo:hi] + '</markup>' + s[hi:]
return s
re.sub(pattern, replacement, text)
замена всех совпадений регулярных выражений в одной строке