def apply_to_digits(some_str,handler): sign = "+" started = 0 number = [] tmp = [] result = [] for idx,char in enumerate(some_str): if started: if not char.isdigit(): if number: ss = sign + "".join(number) rewritten = str(handler(int(ss))) result.append(rewritten) elif tmp: result.append("".join(tmp)) number = [] tmp = [] sign = "+" started = 0 # char will be dealt later else: number.append(char) continue if char in "-+": sign = char started = 1 if tmp: result.append("".join(tmp)) tmp = [] tmp.append(char) continue elif char.isdigit(): started = 1 if tmp: result.append("".join(tmp)) tmp = [] number.append(char) else: tmp.append(char) if number: ss = sign + "".join(number) rewritten = str(handler(int(ss))) result.append(rewritten) if tmp: result.append("".join(tmp)), tmp return "".join(result) #