如何找到括号并计算化学成分中元素的百分比?

问题描述

嗨,我正在尝试从化学成分中获取每种元素的百分比。以下代码适用于常规化学成分。

comp = "Ag20Al25La55"

re.findall('([A-Z][a-z]?)([0-9]*[.]?[0-9]*)',comp)

输出是

[('Ag','20'),('Al','25'),('La','55')]

Bur我如何得到类似的括号?

comp = "(Cu60Zr40)98Y2"

上面的代码会给出

[('Cu','60'),('Zr','40'),('Y','2')]

但是正确的输出应该是

[('Cu','58.8'),'39.2'),'2')]

因为我们必须将98乘以60%才能得出Cu的百分比,然后将98乘以40%才能得出Zr的百分比。

解决方法

您可以尝试:

def compute(x):
  y = float(x.group(2))
  return ''.join([i+str(float(j)*y/100) for i,j in re.findall('([A-z]+)(\\d+[.]?\\d*)',x.group(1))])
  
def final(x): 
    cmp = re.sub('(\\(.*\\))(\\d+)',compute,x)
    return re.findall('([A-Z][a-z]?)([0-9]*[.]?[0-9]*)',cmp)

final(comp)
[('Cu','58.8'),('Zr','39.2'),('Y','2')]

免责声明:这不是最好的方法

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...