import re
line = "Float: __, string: __"
values = ["float", "string"]
obj = lambda:None
obj.i = -1
def repl(m, count, values):
count.i += 1
return f'%{len(m.group(1))}{"." if values[count.i] == "float" else ""}{(len(m.group(2) or ".")-1) if values[count.i] == "float" else ""}{"f" if values[count.i] == "float" else "s"}'
newLine = re.sub(r'(_+)(\._+)?',
lambda m: repl(m, obj, values),
line)
print(newLine)
##Float: %2.0f, string: %2s
aW1wb3J0IHJlCgpsaW5lID0gIkZsb2F0OiBfXywgc3RyaW5nOiBfXyIKdmFsdWVzID0gWyJmbG9hdCIsICJzdHJpbmciXQpvYmogPSBsYW1iZGE6Tm9uZQpvYmouaSA9IC0xCgpkZWYgcmVwbChtLCBjb3VudCwgdmFsdWVzKToKCWNvdW50LmkgKz0gMQoJcmV0dXJuIGYnJXtsZW4obS5ncm91cCgxKSl9eyIuIiBpZiB2YWx1ZXNbY291bnQuaV0gPT0gImZsb2F0IiBlbHNlICIifXsobGVuKG0uZ3JvdXAoMikgb3IgIi4iKS0xKSBpZiB2YWx1ZXNbY291bnQuaV0gPT0gImZsb2F0IiBlbHNlICIifXsiZiIgaWYgdmFsdWVzW2NvdW50LmldID09ICJmbG9hdCIgZWxzZSAicyJ9JwoKbmV3TGluZSA9IHJlLnN1YihyJyhfKykoXC5fKyk/JywKICAgIGxhbWJkYSBtOiByZXBsKG0sIG9iaiwgdmFsdWVzKSwKICAgIGxpbmUpCgpwcmludChuZXdMaW5lKSAgICAgIAojI0Zsb2F0OiAlMi4wZiwgc3RyaW5nOiAlMnMK