2. SMILES原子与键:原子符号、官能团表示、单双三键、芳香键

SMILES 说白了就是一套把分子结构"翻译"成字符串的规则。你得告诉程序:这里有个碳原子,那里有个双键,这个环是 aromatic 的。怎么表达?靠的就是原子符号和键符号的组合。我从最基础的原子符号说起。

2.1 原子符号:从 C 开始

有机分子离不开碳。SMILES 里碳直接用大写 C 表示。氢呢?自动补齐,你不用写。甲烷就是 C,乙烷就是 CC。简洁吧?

其他常见元素也直接用字母表示:

元素 SMILES 写法 说明
碳 C 有机骨架,最常见
氧 O 羟基、羰基、醚键
氮 N 胺基、硝基、杂环
硫 S 巯基、噻吩
磷 P 磷酸酯、膦配体
氟 F 卤素家族
氯 Cl 卤素家族(两个字母)
溴 Br 卤素家族(两个字母)
碘 I 卤素家族

这里有个坑: 单个字母的元素直接写就行。但超过一个字母的元素,必须用方括号括起来。比如 Cl、Br 本身就是两个字母,不需要括号。而钠、铁、铜、金这些,必须写成 [Na]、[Fe]、[Cu]、[Au]。

我踩过的坑: 刚开始写含金属的分子时,我直接写了 Na,结果解析器报错。后来才反应过来——两个字母的卤素是特例,其他多字母元素都得加方括号。你想想看,如果不加括号,程序会把 Na 当成氮和... 不对,解析器会直接不认识。

另外,当原子带有同位素、电荷、手性信息时,也需要用方括号。比如羟基负离子是 [OH-],氘代甲烷是 [2H]C。这些后面章节会细讲,先记住这个原则。

2.2 官能团表示:组合的艺术

SMILES 没有给官能团设计什么"缩写符"。官能团就是原子按连接关系直接写出来。但它有一些固定的"写法模式",我总结了几种常见的:

官能团 SMILES 写法 举例(分子)
羟基 O 乙醇 CCO
羧基 C(=O)O 乙酸 CC(=O)O
氨基 N 甲胺 CN
硝基 N(=O)=O 硝基甲烷 CN(=O)=O
氰基 C#N 乙腈 CC#N
羰基 C=O 丙酮 CC(=O)C
醚键 O 甲醚 COC
酯基 C(=O)OC 乙酸甲酯 CC(=O)OC

你看,羧基其实就是羰基 + 羟基的连写。硝基是氮连两个双键氧。没什么玄乎的,就是原子连接关系的直接表达。

我个人习惯: 写复杂官能团时,先在纸上画一下结构,想清楚连接顺序,再转成字符串。尤其是羧基和硝基,初学者容易把括号位置搞错。

我以前帮同事 review 代码,发现他把乙酸写成了 CCOO。嗯,这表示的是过氧乙酸,不是乙酸。羧基的正确写法是 CC(=O)O,括号表示支链,这一点要牢记。

2.3 单双三键:连接的规则

原子之间怎么连?SMILES 用符号表示键的类型:

  • 单键:不写任何符号。两个原子并列就表示单键。比如 CC 就是 C-C 单键。
  • 双键:用 = 表示。比如乙烯是 C=C,二氧化碳是 O=C=O。
  • 三键:用 # 表示。比如乙炔是 C#C,氰基是 C#N。
  • 立体键:用 / 和 \ 表示顺反异构。这个后面章节会细讲,先知道有这回事。

举个例子,把几种键放在一起看:

乙烯:     C=C
乙炔:     C#C
乙醇:     CCO
乙酸:     CC(=O)O
丙酮:     CC(=O)C
乙腈:     CC#N

有没有发现,CC(=O)O 里双键在括号里面?这表示双键连在第一个碳和氧之间,而不是连在碳链上。SMILES 用圆括号表示分支,这个后面章节也会细说。

我曾经搞错过的一件事: 写丙烯酸时,把双键位置写错了。丙烯酸是 C=CC(=O)O,结果我写成了 CC(=O)C=O,那成了丙酮醛。一个键的位置差,整个分子都变了。所以写完之后最好数一下每个原子的价键数,看是否合理。

2.4 芳香键:小写字母的魔力

苯环怎么表示?你可能会想,单双键交替呗。但 SMILES 有更优雅的方式——芳香键。

规则很简单:芳香原子用小写字母表示。苯环的六个碳都是芳香碳,所以写成 c1ccccc1。

关键点:

  • 芳香碳写成 c(小写)
  • 芳香氮写成 n(小写),比如吡啶是 n1ccccc1
  • 芳香氧写成 o(小写),比如呋喃是 o1cccc1
  • 芳香硫写成 s(小写),比如噻吩是 s1cccc1

数字是环的编号标记。第一个环用 1 标记起始和结束位置。如果有两个环,就用 1 和 2 区分。

为什么用小写? 大写 C 表示脂肪碳,小写 c 表示芳香碳。解析器看到小写字母,就知道这个原子参与芳香体系,会自动处理离域 π 键。这套设计很聪明,你想想看,一个字母的大小写就能区分两种完全不同的化学状态。

举一个对比的例子:

环己烷(脂肪):  C1CCCCC1
苯(芳香):      c1ccccc1

写法几乎一样,但一个用大写 C,一个用小写 c。解析器读到的完全是两个分子。

我记得有一次分析一个药物分子,它的核心是吲哚环。我一开始把它全写成了大写 C,结果生成的 3D 构型完全是乱的。后来才发现,芳香环必须用小写字母,否则力场参数都配不对。嗯,从那以后我每次写杂环都会检查一遍大小写。

2.5 综合实战:看一个完整的分子

把原子符号、官能团、键、芳香性放在一起,看一个真实药物分子片段——对乙酰氨基酚(扑热息痛):

CC(=O)Nc1ccc(O)cc1

来拆解一下:

  • CC(=O) — 乙基 + 羰基(乙酰基)
  • N — 氮原子(酰胺键)
  • c1ccc(O)cc1 — 苯环,4 位连有羟基

你看,大小写混用、括号分支、双键标记、环编号,全在一条字符串里。这就是 SMILES 的表达力。

我建议: 学 SMILES 最好的方法就是多拆解、多写。拿你熟悉的分子,试着用 SMILES 写出来,然后用 RDKit 或 Open Babel 验证一下。写错了它会报错,或者生成奇怪的构型。多试几次就熟练了。

SMILES 原子与键 — 知识结构 SMILES 原子与键 原子符号 单字母元素 C O N S P F I 多字母元素 [Na] [Fe] [Cu] 官能团表示 含氧官能团 -OH -COOH C=O 含氮官能团 -NH2 -NO2 -CN 单双三键 单键 CC(省略) 双键 C=C 三键 C#C 立体键 / 和 \ 芳香键 芳香碳 c(小写) 芳香杂原子 n o s(小写) 经典芳香环 c1ccccc1 / n1ccccc1 大小写决定化学状态:C(脂肪) vs c(芳香),大写字母/小写字母意思完全不同 单键默认省略 | 双键 = | 三键 # | 分支用圆括号 () | 环用数字标记