SMILES表示规则:原子、键、分支
聊到SMILES,很多人第一反应是「一串乱码一样的字符串」。但说白了,它是一门极其精简的化学语言。当年我在做一个高通量虚拟筛选项目时,面对十万级别的化合物库,就是靠SMILES完成了所有分子输入。从那以后我就明白——要玩转化学信息学,SMILES规则必须吃透。
本章我们从三个核心要素入手:原子怎么写、键怎么连、分支怎么处理。这三样搞定了,你就能读懂90%以上的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 四法则
这是个核心规则,当初我学的时候记了好久。其实就四句话:
- 原子符号写标准缩写(第一个字母大写,第二个小写)
- 默认价态按元素种类推断(比如C默认4价)
- 隐含的氢原子自动补全(你不需要写H,系统会自动补)
- 环结构用数字标记连接点(后面章节细讲)
注意: 我曾经有个同事在写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最核心的三个构件:
- 原子:有机子集直接写,其他用方括号;氢原子自动补全,不用写。
- 键:单键可省略,双键、三键、芳香键必须显式写出。
- 分支:圆括号包裹支链,括号紧跟对应的原子;嵌套分支用栈思想匹配。
这三样东西就像汉字里的偏旁部首。你组合好它们,就能描述几乎所有有机分子。下一章我们聊聊环结构的表示——那个数字标记法我第一次看也是一头雾水,但用熟了就会发现它特别巧妙。
总结三句话:
- 原子符号看元素,有机子集直接写,其他原子加方框。
- 单键省略双键显,三键芳香别搞反。
- 分支括号紧跟前,左右括号要配对。