spacepaste

  1.  
  2. def apply_to_digits(some_str,handler):
  3. sign = "+"
  4. started = 0
  5. number = []
  6. tmp = []
  7. result = []
  8. for idx,char in enumerate(some_str):
  9. if started:
  10. if not char.isdigit():
  11. if number:
  12. ss = sign + "".join(number)
  13. rewritten = str(handler(int(ss)))
  14. result.append(rewritten)
  15. elif tmp:
  16. result.append("".join(tmp))
  17. number = []
  18. tmp = []
  19. sign = "+"
  20. started = 0
  21. # char will be dealt later
  22. else:
  23. number.append(char)
  24. continue
  25. if char in "-+":
  26. sign = char
  27. started = 1
  28. if tmp:
  29. result.append("".join(tmp))
  30. tmp = []
  31. tmp.append(char)
  32. continue
  33. elif char.isdigit():
  34. started = 1
  35. if tmp:
  36. result.append("".join(tmp))
  37. tmp = []
  38. number.append(char)
  39. else:
  40. tmp.append(char)
  41. if number:
  42. ss = sign + "".join(number)
  43. rewritten = str(handler(int(ss)))
  44. result.append(rewritten)
  45. if tmp:
  46. result.append("".join(tmp)), tmp
  47. return "".join(result)
  48. #
  49.