原子与键的表示:原子符号、键的类型、分支与环的表示法

SMILES 编码说白了就是用一串字符把分子结构讲清楚。怎么讲?靠三样东西:原子符号、键的类型,再加上分支和环的表示法。这一章我们就掰开揉碎了聊这些规则。我刚开始学 SMILES 的时候,觉得规则挺简单,后来踩了几个坑才明白,细节里全是门道。

1. 原子符号:从简写到方括号

SMILES 里表示原子,分两种情况。

有机元素可以直接写符号。B、C、N、O、P、S、F、Cl、Br、I 这些,直接写大写字母就行。氢原子通常省略,由软件自动补全。你想想看,乙醇写 CCO 而不是 C2H6O,省了多少事。

有机元素简写表

元素SMILES 写法示例
碳C甲烷 CH₄ → C
氧O水 H₂O → O
氮N氨 NH₃ → N
硫S硫化氢 H₂S → S
氯Cl氯甲烷 CH₃Cl → CCl

其他元素要用方括号括起来。比如钠写 [Na],铁写 [Fe],溴写 [Br]。为什么有的元素不用括号?我个人的理解是:有机化学里常见的那些元素出现频率太高,省掉括号能大幅缩短 SMILES 字符串。但碰到金属、稀有气体,或者需要标明同位素、价态、手性的时候,方括号就绕不开了。

方括号内还能加附加信息:
[13C] — 同位素标记的碳-13
[OH-] — 带负电的羟基
[C@@H] — 手性碳,指定立体构型

我在项目中遇到过新手把乙酸钠写成 CC(=O)[ONa],结果解析器报错。实际上钠必须写成 [Na],阳离子和阴离子也要分开。正确的写法是 CC(=O)[O-].[Na+]。

2. 键的类型:连接原子的桥梁

SMILES 用符号表示原子之间的化学键。一共四种类型,嗯,这里要注意省略规则。

键型符号示例说明
单键-C-C通常省略
双键=C=C不可省略
三键#C#C不可省略
芳香键:c1ccccc1芳香环中用

单键可以省略,这是 SMILES 最常用的简化手段。CC 就是乙烷,CCO 就是乙醇。你想想看,如果每个单键都写上,字符串得长一倍。

双键和三键不能省。我建议你养成习惯,写双键时一定加等号,写三键时一定加井号。否则解析器会把它当成两个原子直接相连的单键,结构就错了。

常见错误:把乙烯写成 CC。这是乙烷,不是乙烯。双键必须写出来:C=C。

我记得有一次处理一个天然产物的数据库,里面有一批分子死活匹配不上。查了半天,发现是双键位置写错了,等号放在了碳链的末端而不是中间。一个等号的位置,差之毫厘谬以千里。

3. 分支结构:圆括号的妙用

分子不是一条直线。怎么表示侧链和支链?用圆括号。

括号里的内容表示从当前原子分出去的支链。比如异丁烷 (CH₃)₂CHCH₃,SMILES 写成 CC(C)C。括号里的 (C) 表示从第二个碳分出去一个甲基。

括号可以嵌套。更复杂的分子,比如带有多个侧链的氨基酸,用括号一层套一层。

# 异丁烷:主链 C-C-C,第二个碳上连一个甲基
CC(C)C

# 叔丁醇:主链 C-O,碳上连三个甲基
CC(C)(C)O

# 更复杂的分支:2-甲基丁烷
CCC(C)C

我个人习惯:写复杂分支时,把每个括号内的原子数算清楚,然后数一下括号是否成对。我曾经在一次自动化脚本里生成 SMILES,少写了一个右括号,结果解析器把整个分子结构都读歪了,那个 bug 我调了整整一个下午。

检查括号是否匹配的小技巧:从左到右数,左括号加1,右括号减1,最终回到0。如果中间出现负数或结尾不是0,括号一定有问题。

4. 环结构:数字标签

环状结构怎么表示?SMILES 用数字标签来标记环的起点和终点。

简单说,在环开始和结束的原子后面标上同一个数字。环己烷 C₁-C₂-C₃-C₄-C₅-C₆ 首尾相连,写成 C1CCCCC1。第一个碳标1,第六个碳也标1,表示它们之间连了一条键。

# 环己烷
C1CCCCC1

# 苯(用芳香写法)
c1ccccc1

# 环戊烷
C1CCCC1

多个环用不同的数字。第1个环标1,第2个环标2,以此类推。一个分子里最多可以有上百个环,数字可以重复使用吗?可以,只要不同时出现就行。

多环化合物示例:十氢化萘
SMILES: C1CCCC2C1CCCC2
第1个环用数字1标记,第2个环用数字2标记,两个环共用两个碳原子。

我在项目中遇到过最头疼的事,就是处理一个带有15个环的天然产物。数字标签从1到15,我得一个一个数,生怕哪个数字标重复了或者漏标了。后来我写了个小脚本自动校验环的闭合性,才从这种苦力活里解脱出来。

避坑指南:我曾经在处理一个多环甾体化合物时,把两个环的数字标签写反了。环A用了2,环B用了1,结果解析出来的结构完全不是我要的分子。记住:每一对数字标签只能用于一个环,不能交叉使用。

5. 综合示例:从简单到复杂

来看看几个完整的 SMILES 编码,从简单到复杂,把刚才讲的规则串起来。

# 乙醇 — 最简单的含氧有机物
CCO

# 乙酸 — 含双键和羟基
CC(=O)O

# 2-丁醇 — 带分支的醇
CCC(C)O

# 环己烷 — 六元环
C1CCCCC1

# 甲苯 — 苯环上连甲基
Cc1ccccc1

拿乙酸 CC(=O)O 举个例子。从左往右读:C(碳1),C(碳2),(=O)(碳2上连一个双键氧),O(碳2上连一个羟基)。第二个碳上连了两个分支:一个双键氧,一个羟基。这就是 SMILES 的优雅之处——用简单的字符,精确描述三维结构。

下面这张图总结了本章的核心知识体系,我把原子符号、键的类型、分支表示和环表示放在一起,方便你对照记忆。

SMILES 编码核心要素结构图 SMILES 编码规则 原子 · 键 · 分支 · 环 原子符号 C, O, N, [Na], [Fe] 键的类型 -, =, #, : 分支表示 CC(C)C 异丁烷 环表示 C1CCCCC1 环己烷 四种要素组合在一起,就能描述几乎任何有机分子 从简单烷烃到复杂天然产物,SMILES 都能搞定

6. 常见错误与避坑

最后总结几个我实际工作中遇到的坑,你写 SMILES 的时候留个心眼。

  • 括号不匹配:左括号和右括号数量不一致。写完后数一遍。
  • 环的数字标签重复:同一个分子里,两个不同的环用了相同的数字。解析器会报错或生成错误结构。
  • 双键位置错误:把双键放在不能存在的位置(比如环内的角张力过大处),或者漏写了双键。
  • 方括号遗漏:金属离子、同位素、带电原子忘记加方括号。
  • 芳香环误用大写:芳香族原子用小写字母(c, o, n),不是大写。写成 C1CCCCC1 是环己烷,不是苯。

一个小习惯:写完 SMILES 后,用 RDKit 或 OpenBabel 解析一下,看看生成的结构是不是你要的。可视化检查比肉眼看字符串可靠一百倍。