You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用RDKit修改分子结构,在支链末端添加COOH基团?

支链分子末端添加COOH基团的RDKit实现方法

需求说明

现有如图所示的支链分子,需要将所有支链末端的NH2基团替换为COOH基团:
支链分子修改前后对比
原始简化版4支链分子SMILES如下:

[N:1]([CH2:2][CH2:3][N:4]([CH2:47][CH2:48][CH:49]([NH:50][CH2:51][CH2:52][NH2:53])[O-:55])[CH2:66][CH2:67][CH:68]([NH:69][CH2:70][CH2:71][NH2:72])[O-:74])([CH2:9][CH2:10][CH:11]([NH:12][CH2:13][CH2:14][NH2:15])[O-:17])[CH2:28][CH2:29][CH:30]([NH:31][CH2:32][CH2:33][NH2:34])[O-:36]

原有代码问题分析

你编写的替换代码无效果的核心原因有两点:

  1. 匹配子结构[NH2:34]指定了唯一的原子映射编号34,仅能匹配到分子中1个对应编号的末端氨基,无法覆盖所有4个支链的末端氨基
  2. 替换目标为[CH2:99]不符合需求,不需要先替换为亚甲基,可以直接一步完成COOH的替换

正确实现代码

from rdkit import Chem

# 读取原始分子
raw_smiles = "[N:1]([CH2:2][CH2:3][N:4]([CH2:47][CH2:48][CH:49]([NH:50][CH2:51][CH2:52][NH2:53])[O-:55])[CH2:66][CH2:67][CH:68]([NH:69][CH2:70][CH2:71][NH2:72])[O-:74])([CH2:9][CH2:10][CH:11]([NH:12][CH2:13][CH2:14][NH2:15])[O-:17])[CH2:28][CH2:29][CH:30]([NH:31][CH2:32][CH2:33][NH2:34])[O-:36]"
mol = Chem.MolFromSmiles(raw_smiles)

# 定义匹配规则:匹配所有末端伯氨基
match_pattern = Chem.MolFromSmarts("[NH2]")
# 定义替换规则:替换为COOH基团
# 如果需要在COOH和原有碳链之间额外插入CH2,可将替换规则改为Chem.MolFromSmarts("[CH2]C(=O)[O]")
replace_pattern = Chem.MolFromSmarts("[C](=O)[O]")

# 执行全量替换
modified_mol = Chem.ReplaceSubstructs(mol, match_pattern, replace_pattern, replaceAll=True)[0]
# 校验分子合法性
Chem.SanitizeMol(modified_mol)

# 输出修改后的分子SMILES
print(Chem.MolToSmiles(modified_mol))

扩展说明

该方案可以直接迁移到更大的同类型支链分子中,只要分子的支链末端均为伯氨基结构,不需要修改匹配规则即可完成批量替换。

内容的提问来源于stack exchange,提问作者Aykut Elmas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:45:03