You could use pass an anonymous function (a lambda) to re.sub:
def fix_stuff(m, var1, var2):
# Do various things that involves for info
# that what's available in m
replacement_text = m.group(1) + var1 + var2
return replacement_text
global_var1 = "bla bla"
global_var2 = "pff"
new_text = re.sub(im_pattern, lambda m, var1=global_var1,
var2=global_var2: fix_stuff(m, var1, var2), md_text)
Or, if you prefer a named function, define one just before the re.sub:
def fix_stuff(m, var1, var2):
# Do various things that involves for info
# that what's available in m
replacement_text = m.group(1) + var1 + var2
return replacement_text
global_var1 = "bla bla"
global_var2 = "pff"
def fix_it(m, var1=global_var1, var2=global_var2):
return fix_stuff(m, var1, var2)
new_text = re.sub(im_pattern, fix_it, md_text)