Хитрость заключается в предоставлении функции в качестве аргумента repl
для re.sub()
:
In [7]: re.sub(r'(\d+)', lambda m:'%.0f'%(float(m.group(1))*2), 'test line 123')
Out[7]: 'test line 246'
Каждое совпадение преобразуется в float
, удваивается, а затем преобразуетсяв строку, используя соответствующий формат.
Это можно немного упростить, если число целое, но в вашем вопросе конкретно упоминается float
, так что это то, что я использовал.