ure_sub.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. try:
  2. import ure as re
  3. except ImportError:
  4. try:
  5. import re
  6. except ImportError:
  7. print('SKIP')
  8. raise SystemExit
  9. try:
  10. re.sub
  11. except AttributeError:
  12. print('SKIP')
  13. raise SystemExit
  14. def multiply(m):
  15. return str(int(m.group(0)) * 2)
  16. print(re.sub("\d+", multiply, "10 20 30 40 50"))
  17. print(re.sub("\d+", lambda m: str(int(m.group(0)) // 2), "10 20 30 40 50"))
  18. def A():
  19. return "A"
  20. print(re.sub('a', A(), 'aBCBABCDabcda.'))
  21. print(
  22. re.sub(
  23. r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',
  24. 'static PyObject*\npy_\\1(void){\n return;\n}\n',
  25. '\n\ndef myfunc():\n\ndef myfunc1():\n\ndef myfunc2():'
  26. )
  27. )
  28. print(
  29. re.compile(
  30. '(calzino) (blu|bianco|verde) e (scarpa) (blu|bianco|verde)'
  31. ).sub(
  32. r'\g<1> colore \2 con \g<3> colore \4? ...',
  33. 'calzino blu e scarpa verde'
  34. )
  35. )
  36. # no matches at all
  37. print(re.sub('a', 'b', 'c'))
  38. # with maximum substitution count specified
  39. print(re.sub('a', 'b', '1a2a3a', 2))
  40. # invalid group
  41. try:
  42. re.sub('(a)', 'b\\2', 'a')
  43. except:
  44. print('invalid group')
  45. # invalid group with very large number (to test overflow in uPy)
  46. try:
  47. re.sub('(a)', 'b\\199999999999999999999999999999999999999', 'a')
  48. except:
  49. print('invalid group')