SMILES表示规则:原子、键、分支

聊到SMILES,很多人第一反应是「一串乱码一样的字符串」。但说白了,它是一门极其精简的化学语言。当年我在做一个高通量虚拟筛选项目时,面对十万级别的化合物库,就是靠SMILES完成了所有分子输入。从那以后我就明白——要玩转化学信息学,SMILES规则必须吃透。

本章我们从三个核心要素入手:原子怎么写、键怎么连、分支怎么处理。这三样搞定了,你就能读懂90%以上的SMILES字符串。

SMILES 表示规则 · 知识框架 SMILES 语法三要素 ① 原子表示 ② 键的表示 ③ 分支处理 有机元素(C/N/O/S/P) 四法则 & 无氢原则 方括号 [ ] 特殊原子 单键(-)与省略 双键(=)三键(#) 芳香键(:) 括号 ( ) 包裹支链 嵌套分支:链式展开 分支连接方向:右链优先 掌握这三部分,就能读懂和写出标准 SMILES

2.1 原子表示规则

原子是SMILES最小的构件。规则其实很简单,但有几个细节特别容易栽跟头。

2.1.1 有机元素子集

有这么几个元素,书写时可以直接用元素符号,不需要加方括号:

有机元素子集: B、C、N、O、P、S、F、Cl、Br、I

其他的元素,比如Na、Fe、Mg,必须用方括号括起来,写成 [Na]、[Fe]、[Mg]。

为什么这样设计?我琢磨过——早期SMILES是为有机化学设计的,所以把有机化学里最常见的元素单拎出来,方便书写。无机或金属有机化合物,用方括号兜底。

2.1.2 四法则

这是个核心规则,当初我学的时候记了好久。其实就四句话:

  1. 原子符号写标准缩写(第一个字母大写,第二个小写)
  2. 默认价态按元素种类推断(比如C默认4价)
  3. 隐含的氢原子自动补全(你不需要写H,系统会自动补)
  4. 环结构用数字标记连接点(后面章节细讲)

注意: 我曾经有个同事在写SMILES时,把乙醇写成了 C2H5OH,结果解析器报错。他忘了——SMILES里不需要也不能写H原子,系统会根据价态自动补全。正确写法是 CCO。

举个例子:乙醇的SMILES是 CCO。我用眼睛看的时候,会这样拆解:第一个C是甲基碳(连3个H),第二个C是亚甲基碳(连2个H),最后的O是羟基氧(连1个H)。

你想想看,要是我写成 C2H6O,那SMILES解析器会怎么理解?它会把2当成环标记或分支标记,乱套了。

2.1.3 方括号与特殊原子

当原子偏离默认价态、带电荷、或是同位素时,必须用方括号括起来:

[Fe]         — 铁原子(不在有机子集中)
[OH-]        — 氢氧根离子
[13C]        — 碳-13同位素
[NH4+]       — 铵离子
[Cu+2]       — 铜(II)离子

这里有个技巧:方括号内可以写 原子符号 + 氢原子数(可选) + 电荷(可选)。顺序是固定的。

小经验: 写带电原子时,电荷符号+或-跟在数字后面,比如 [Fe+3] 表示Fe(III)。电荷写在前或后都能被解析,但我个人习惯统一把电荷放在末尾,可读性更好。

2.2 键的表示

SMILES里的键符号很直观,但也有一些省略规则需要注意。

键类型 SMILES符号 示例 说明
单键 - 或省略 CC 或 C-C 相邻原子默认是单键,可省略
双键 = C=C 必须显式写出
三键 # C#C 必须显式写出
芳香键 : c1ccccc1 小写c表示芳香碳,键隐含

我用项目里的例子说明一下:乙醇写成 CCO,这里两个C之间是单键,C和O之间也是单键。单键符号被省略了,但解析器心里门儿清。

双键和三键不能省,必须写出来。比如乙烯必须是 C=C,写成 CC 就变成乙烷了。这个坑我见过不少人踩。

关键区别: 单键符号 - 是可选的,但双键 =、三键 #、芳香键 : 是强制的。我建议初学者刚开始都写完整,等熟练了再省略单键符号。

2.3 分支处理

分支是SMILES里最考验「人肉栈」的部分。它用圆括号 ( ) 来表示支链。

2.3.1 基本分支语法

规则很简单:括号里的部分是一个完整的支链,连接到括号前的原子上。

CC(C)C       — 异丁烷:主链C-C-C,中间的C上连一个甲基支链
CC(C)(C)C    — 新戊烷:中间的C连两个甲基支链
CCC(=O)O    — 丙酸:中间的C上连一个=O支链,末尾C连一个-OH支链

我刚开始写分支时,总搞不清括号应该放在哪。后来记住一句话:括号紧跟它连接的原子。

2.3.2 嵌套分支

一个原子上可以连多个分支,也可以分支套分支:

CC(C)(C)C         — 新戊烷(两个甲基分支在同一个C上)
CC(C)C(C)C        — 2,3-二甲基丁烷
CC(C)(C(=O)O)    — 2-甲基丙酸(支链里还有支链)

解析嵌套分支时,脑子里要做一个「栈操作」——遇到左括号就入栈,遇到右括号就出栈。嗯,其实写SMILES和写代码的括号匹配是一模一样的道理。

避坑指南: 我曾经在写一个含多个支链的分子时,少写了一个右括号,结果解析器把后面一大段都当成支链内容了,最后输出完全不对。所以写完SMILES字符串,一定要数一数左右括号数量是否一致。一个小技巧:用带语法高亮的编辑器写SMILES,括号匹配一目了然。

2.3.3 分支连接方向

SMILES里分支默认连接到「左边紧邻的原子」:

CC(C)CC    — 分支连在第二个C上,而不是第一个或第三个

但要注意:如果括号前面是另一个括号的结尾,那分支就连接到对应的原子上:

CC(C)(C)CC   — 两个分支都连在第二个C上

这个规则说白了就是——括号的归属由它前面的非括号原子决定。

2.4 综合示例:手写解析

我们用几个实际例子,把原子、键、分支串联起来看看。

SMILES 分子名称 结构拆解
CCO 乙醇 C-C-O,单键全部省略
CC(C)C 异丁烷 主链C-C-C,第二个C的分支上连一个甲基
C=C 乙烯 双键显式写出
CC(=O)O 乙酸 第二个C上连一个=O分支,末尾C连-OH
c1ccccc1 苯 小写c表示芳香碳,数字1标记环闭合

我的个人习惯: 刚开始练习时,我会把每个SMILES的手工展开画一遍。拿 CC(=O)O 举例,我先写主链 C-C-O,然后看到括号里的 =O 连在第二个C上,所以第二个C上除了连C和O,还连了一个双键O。画着画着就顺了。

2.5 小结

这一章我们聊了SMILES最核心的三个构件:

  • 原子:有机子集直接写,其他用方括号;氢原子自动补全,不用写。
  • 键:单键可省略,双键、三键、芳香键必须显式写出。
  • 分支:圆括号包裹支链,括号紧跟对应的原子;嵌套分支用栈思想匹配。

这三样东西就像汉字里的偏旁部首。你组合好它们,就能描述几乎所有有机分子。下一章我们聊聊环结构的表示——那个数字标记法我第一次看也是一头雾水,但用熟了就会发现它特别巧妙。

总结三句话:

  • 原子符号看元素,有机子集直接写,其他原子加方框。
  • 单键省略双键显,三键芳香别搞反。
  • 分支括号紧跟前,左右括号要配对。