- 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)
- #