fork download
  1. import re
  2.  
  3. s = 'K4[ON(SO3)2]2'
  4.  
  5. target = s.replace('[', '(').replace(']', ')')
  6. while True:
  7. m = re.search(r'(\(([^()]*)\)(\d+))', target)
  8. if not m:
  9. break
  10. substr, data, num = m.groups()
  11. target = target.replace(substr, data * int(num))
  12.  
  13. result = {}
  14. for m in re.finditer(r'([A-Z][a-z]?)(\d+)?', target):
  15. el, num = m.groups('1')
  16. result[el] = result.get(el, 0) + int(num)
  17.  
  18. print(list(result.items()))
Success #stdin #stdout 0.03s 9636KB
stdin
Standard input is empty
stdout
[('K', 4), ('O', 14), ('N', 2), ('S', 4)]