分析化学方程式,在Python中将括号外的子索引相乘

时间:2015-04-11 17:51:55

标签: python formula chemistry

所以我对Python有点新意。现在我正在制作化学方程式平衡器而且我已经卡住了因为我现在要做的是如果你在括号中收到一个化合物,外面有一个子索引(像这样:(NaCl) 2 < / sub>),我想将它扩展为这种形式:Na 2 Cl 2 (并且还删除了括号)。现在我已经设法用这个代码摆脱括号:

import string
import re

linealEquation = ""

def linealEq(equation):
    #missing code
    allow = string.letters + string.digits + '+' + '-' + '>'
    linealEquation = re.sub('[^%s]' % allow, '', equation)
    print linealEquation

linealEq("(CrNa)2 -> Cr+Na")

但是如何跟踪字符串并将索引乘以括号?

我知道如何迭代一个字符串,但我想不出如何专门乘以子索引。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

可能不是最短的解决方案,并且在所有情况下都不会起作用,但适用于您的示例:

left,  right = equation.split('->')
exp = left.strip()[-1]
inside = left[1:-3]
c2 = re.findall('[A-Z][^A-Z]*', inside)
l = [s + exp for s in c2]
res =''.join(l)

N.B。你可以添加印刷语句,以便更好地理解每一步......