使用Python re模块分解分子式 提取元素及对应数量生成字典
分子式元素拆分功能实现修正方案
原代码问题分析
- 缺少
re模块导入,直接运行会抛出名称错误 - 正则规则存在多处逻辑错误:
- 元素匹配规则
[A-Z][a-z]+要求元素名必须包含至少1个小写字母,无法匹配C、N、O这类单字母元素 - 数字匹配规则
\[0-9]+多了不必要的转义符\,会匹配字面量[而非数字,且强制要求至少1个数字,无法匹配没有后续数字的元素(如示例中的N) - 分组设计冗余混乱,不需要多余的
name2命名分组
- 元素匹配规则
修正后完整代码
如果需要数字保持字符串类型、无数字时为空字符串,可直接用以下代码:
import re Formula = "C16H21NO2Na3" # 正则第一组匹配元素名:大写开头,可选1个小写字母;第二组匹配后续数字,允许为空 pat = re.compile(r'([A-Z][a-z]?)(\d*)') molecule = dict(pat.findall(Formula)) print(molecule)
如果需要将非空的数字转为整数类型(匹配你给出的期望输出格式),调整为以下逻辑:
import re Formula = "C16H21NO2Na3" pat = re.compile(r'([A-Z][a-z]?)(\d*)') molecule = {} for elem, num in pat.findall(Formula): molecule[elem] = int(num) if num else '' print(molecule)
运行输出
{'C': 16, 'H': 21, 'N': '', 'O': 2, 'Na': 3}
内容的提问来源于stack exchange,提问作者Van3
相关产品推荐
相关产品推荐

