第1章 SMILES简介与基本规则

做化学信息学的人,早晚都会撞上 SMILES。我第一次接触这玩意儿是在八年前,当年接手一个化合物库的清洗脚本,老代码里全是“CCO”“CC(=O)O”这种东西。说实话,第一反应是懵的——这串字母到底怎么对应分子结构?

后来啃了几篇论文,自己动手写了个解析器,才算真正搞明白。SMILES(Simplified Molecular Input Line Entry System)说白了就是用一个字符串把分子结构“拍平”。它不像 molfile 那么啰嗦,也不像 InChI 那样自带校验和。简单,但坑也不少。

这节课我们就从头捋一遍 SMILES 的基本规则。你想想看,一个小字符串里要表达原子、键、分支、环、手性、同位素、电荷……不搞清楚规则,写出来的 SMILES 轻则解析失败,重则画出错误的分子。

1.1 原子表示——最基础的积木

SMILES 里的原子用元素符号直接写。比如碳原子写 C,氧写 O,氮写 N。注意,有机元素 Br、Cl、F、I 用两个字母,首字母大写,第二个小写。(我见过有人把溴写成 BR,结果解析器当成硼和什么乱七八糟的……)

氢原子在 SMILES 里通常不写出来,系统根据化合价自动补全。举个例:CCO 表示乙醇,两个碳一个氧,不写氢。

元素SMILES 写法说明
碳C最常见
氧O羟基、羰基等
氮N胺、硝基等
氯Cl两个字母,第二个小写
溴Br同上
硫S注意别写成小写
我的一个小习惯:写有机分子时,碳原子我喜欢用大写 C,但苯环上的碳用 c(小写)表示芳香性。这个后面会细讲。

1.2 单键、双键、三键与分支

键的连接方式很简单:

  • 单键:直接写出相连的原子,或者用 - 连接(不过大部分时候省略)。
  • 双键:用 = 写在两个原子之间。
  • 三键:用 #。
  • 分支:用圆括号 () 把支链括起来,括号内的原子连接到前面那个原子上。

举个例子:乙醇的写法 CCO 其实可以理解为 C-C-O 单键链。丙酮呢?CC(=O)C——中间的碳上连了一个双键氧,那个括号说明氧是支链,不是链的一部分。

# 几种常见示例
乙醇     CCO
丙酮     CC(=O)C
乙酸     CC(=O)O
甲胺     CN
三键     C#N   (乙腈)

这里有个坑:分支括号必须成对出现,而且括号里的原子个数不限。我曾在一个 3000 种化合物的库中发现有人写了 CC(=O(C)C) 这种错法——括号放错位置,结果解析出来的结构多了一个碳环。避坑指南:**括号里的内容表示取代基,只能挂在前面那个原子上,不能跨原子括。**

1.3 环——用数字标记开环

SMILES 里要表达环结构,不能真的画圈,而是用数字做标记。比如苯:c1ccccc1。数字 1 表示第一个标记点,后面再出现 1 就把前后两个原子连起来成环。

如果是脂肪环,比如环己烷:C1CCCCC1。数字可以是 0–99,但注意不要重复使用同一个数字表示不同环(除非被冒号分隔的离散数字,但基本规则中我们一般只用一个数字对应一个环)。

分子SMILES说明
苯c1ccccc1小写c表示芳香碳
环丙烷C1CC1三员环
环己烷C1CCCCC1六员环
甲苯Cc1ccccc1甲基连在苯环上
注意:环编号一旦出现两次,解析器就会在对应位置建立单键。如果你希望环中的键是双键,要明确写出 =,比如环戊二烯:C1=CC=CC1。我曾经见过有人写 C1=CC=CC1 结果多画了一个双键……嗯,其实就是格式不对。

1.4 手性——@ 与 @@

SMILES 用 @ 和 @@ 标记手性中心。放在手性原子符号后面。比如丙氨酸的两种手性异构体:

  • L-丙氨酸:N[C@@H](C)C(=O)O
  • D-丙氨酸:N[C@H](C)C(=O)O

@ 表示逆时针方向(按原子顺序的透视式),@@ 表示顺时针。记住方法:@ 像一个逆时针的小箭头。我个人习惯在处理手性时先画出费歇尔投影,再转换成 SMILES,这样不容易搞混。

1.5 芳香性与小写字母

芳香性在 SMILES 里用小写元素符号表示。常见的是 c、n、o、s 等。比如吡啶:n1ccccc1。注意,芳香环中的双键不写,系统自动按离域键处理。

为什么不直接写大写的 C1=CC=CC=C1?因为那样写出来的是带交替单双键的环己三烯,不是真正的芳香苯环。解析器在芳香性处理后结构会不一样。所以,如果你想表达真实苯环,必须用小写 c。

关键区别:
c1ccccc1 → 苯,芳香性。
C1=CC=CC=C1 → 环己三烯(非芳香性)。

1.6 同位素、电荷与原子详细表示

原子还可以带方括号表示同位素、电荷、额外氢。格式如下:

[13C]        – 碳-13
[NH4+]       – 铵离子
[OH-]        – 氢氧根
[2H]CH3      – 氘代甲烷(甲基上的一个氢被氘取代)

方括号里的内容可以包含:

  • 原子符号(大写首字母)
  • 质量数(可选,放在元素符号前面,比如 [13C])
  • 电荷(用 +、- 表示,可加数字,比如 [Fe+2])
  • 氢原子个数(用 H 加数字,比如 [CH2] 表示“碳上连两个氢”,但一般不这样写,因为 SMILES 会自动补氢)

我遇到过坑:写 [Fe+2] 时忘记写方括号,结果解析成 Fe 加一个数字 2,成了铁原子后面跟一个孤零零的数字。避坑:**所有带电荷、同位素、额外信息的原子都必须用方括号括起来。**

1.7 整个知识体系:SMILES 字符串到分子结构的映射

这一张图帮你理清从字符串到真实分子之间的转化流程。

SMILES 字符串 → 分子结构 核心流程 SMILES 字符串 1. 解析原子(含环编号) 2. 处理分支 & 键连接 3. 环闭环 / 标记匹配 4. 自动补氢 & 芳香性处理 完整分子结构 重要概念 • 原子符号区分大小写 • 分支需用圆括号包裹 • 环编号成对出现 容易踩的坑 • 括号不配对 • 环编号混乱 • 芳香性用大写C

从上面这张图可以看出,SMILES 的解析并不是一步到位的。系统需要依次处理原子、分支、环、补氢。我早期写解析器的时候漏掉了芳香性后处理,结果输出的苯环结构仍然显示为环己三烯,被导师批了一顿。

1.8 避坑指南——你可能会犯的错误

  1. 数字冲突:一个环编号不要被两对以上原子使用。比如多个环时,需要用 % 加两位数字避免混淆。样例:C%12CC%12C%13CC%13 表示两个不共享原子的环。
  2. 括号连续性:CC(OC) 表示甲氧基乙烷,但若写成 CC(O(C)) 则多了一层括号,表示氧上再连一个碳?不,结构会乱。保持括号最小嵌套。
  3. 手性忘记写 @:如果你没写 @,默认不是手性中心。在药物分子里少写一个 @ 可能改变立体构型,活性可能就是天壤之别。
一个真实教训:我曾需要批量处理 10 万条 SMILES,某批次产物纯度突然下降。排查后发现来源数据里环编号用错——同一个数字 1 被用在三个原子上(比如 C1CN1C1),解析器报了环冲突。后来加了个校验脚本,提前检测环编号重复次数。

1.9 检验你的理解——几个小练手

下面这几个 SMILES 你试着在脑海中还原成结构,并判断正误。答案写在右下角空白处(当然这里只是文字)。

SMILES目标分子对/错?
c1ccccc1苯正确
C1=CC=C(C=C1)苯?错误(大小写混了)
CC(=O)O乙酸正确
N[C@@H](C)C(=O)OL-丙氨酸正确