Advertisement
Guest User

Untitled

a guest
Nov 17th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.97 KB | None | 0 0
  1. import re
  2.  
  3. def addElement(d, el, cnt):
  4.     if el in d:
  5.         d[el] += cnt
  6.     else:
  7.         d[el] = cnt
  8.  
  9. def parse_simple(formula):
  10.     out = {}
  11.     match = re.findall(r'([A-Z][a-z]?)(\d+)?', formula)
  12.     if match:
  13.         for element, cnt in match:
  14.             cnt = cnt or '1'
  15.             addElement(out, element, int(cnt))
  16.     return out
  17.  
  18. def expand(formula, mult):
  19.     match = re.findall(r'([A-Z][a-z]?)(\d+)?', formula)
  20.     ret = ''
  21.     if match:
  22.         for element, cnt in match:
  23.             cnt = cnt or '1'
  24.             cnt = str(int(cnt) * int(mult))
  25.             ret += element + cnt
  26.     return ret
  27.  
  28. def parse_molecule(formula):
  29.     def repl(match):
  30.         form = match.group(1)
  31.         mul = match.group(2) or 1
  32.         return expand(form, mul)
  33.  
  34.     formula = re.sub(r'\((\w+)\)(\d+)?', repl, formula)
  35.     formula = re.sub(r'\[(\w+)\](\d+)?', repl, formula)
  36.     formula = re.sub(r'\{(\w+)\}(\d+)?', repl, formula)
  37.     return parse_simple(formula)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement