SMILES语法基础:原子、键、分支、环的表示方法
SMILES不是天书,它有一套非常清晰的语法规则。说白了,就是用一串字符,把分子结构“写”出来。我刚开始接触时也觉得这东西挺玄乎,但一旦理解了它的设计思路——哦,原来如此。
SMILES的核心要素就四个:原子、键、分支、环。这四个要素组合起来,就能表示几乎所有有机分子。咱们一个一个拆开看。
原子表示法:既简单又苛刻
大多数有机原子直接用元素符号表示。碳就是C,氧就是O,氮就是N。但这里有个细节,芳香族原子用小写,脂肪族用大写。
| 原子类型 | SMILES写法 | 示例 |
|---|---|---|
| 脂肪族碳 | C | 甲烷 C |
| 芳香族碳 | c | 苯 c1ccccc1 |
| 脂肪族氮 | N | 氨 N |
| 芳香族氮 | n | 吡啶中的氮 n1ccccc1 |
| 氧 | O | 水 O |
| 硫 | S | 硫化氢 S |
| 卤素 | F, Cl, Br, I | 氯甲烷 CCl |
CL 是错的,标准写法必须是 Cl。我在项目中遇到过不少因为写成 CL 导致解析失败的案例。
对于特殊原子、同位素、电荷、手性,需要用方括号括起来。比如离子、金属原子、带有特定同位素的原子。
[Na+] ; 钠离子
[OH-] ; 氢氧根
[13C] ; 碳-13同位素
[Fe+2] ; 亚铁离子
[C@@H](Br)Cl ; 手性碳,带旋向标记
个人习惯是:如果原子是常见有机元素且不带电荷,不写方括号;否则老老实实加方括号。标准化工具里的一个常见坑就是漏掉方括号里的内容。
[N+] 写成了 N+,少了方括号。SMILES对格式非常敏感,差一个字符就是不同的分子。
键的表示法:默认单键,特殊显式
单键在SMILES里是默认的。相邻的两个原子之间就是单键,不需要额外符号。双键用=,三键用#,四键用$——不过四键很少见。
你想象一下:写字符串的时候,原子符号挨在一起,之间就是单键;中间加个=,表示双键。
CC ; 乙烷:C-C 单键
C=C ; 乙烯:C=C 双键
C#C ; 乙炔:C≡C 三键
C=O ; 甲醛:C=O 双键
C#N ; 氰化氢:C≡N 三键
- 写出,但通常不需要。C-C 和 CC 在标准SMILES里是等价的。我个人只在遇到键序歧义时才用显式单键,保证可读性。
来个实际点的例子。我在处理天然产物数据库时,遇到了一个含累积双键的结构——1,2-丙二烯:C=C=C。三个原子两根双键,中间碳连着两个双键。这种写法看着别扭,但标准SMILES就是这样的线性表达。
分支结构:用括号描述侧链
分支是SMILES的精髓之一。它用圆括号把侧链包起来,挂在主干上的某个原子上。分支可以嵌套分支,可以多次挂分支。
基本规则很简单:主干从左到右写,遇到分支节点时,用(分支)插在主干原子后面。
CC(C)C ; 异丁烷:主干是C-C-C,中间碳上挂一个甲基
CC(C)(C)C ; 新戊烷:中间碳上挂两个甲基
C(C)(C)(C)C ; 实际解析会按分支规则处理,没问题
OC(=O)C ; 乙酸:O-C(=O)-C,括号内是双键氧
你想想看,为什么不能用图形表示非要写括号?因为SMILES是线性字符串,分支括号本质上是对分子图的深度优先遍历编码——遇到分叉就递归,用括号包裹子遍历的结果。
嵌套分支的例子:
CC(C)(C)CC(C)(C)C ; 2,2,4,4-四甲基戊烷,结构对称
C(CC)(C(=O)O)C ; 一个嵌着羧基的分支
是否觉得能看懂一些了?
环的表示法:数字标记开环
环是SMILES最巧妙的设计。分子的环状结构怎么用线性字符串表达?答案是用数字标记两个原子之间的连接关系。
规则是:在环的起点原子后面写一个数字,在终点原子后面写同一个数字。这个数字表示:“把这两个原子连起来,形成环”。
c1ccccc1 ; 苯:6个芳香碳,数字1标记环的起点和终点
C1CCCCC1 ; 环己烷:脂肪族碳,6元环
C1=CC=CC=C1 ; 环己三烯(实际上常写为芳香表示)
O1CCCCC1 ; 四氢吡喃:一个氧的五元环
数字可以重复使用,但需要成对出现。标准SMILES允许的数字范围是1到9,多位环数需要用%数字。
C1CC2CCCC2C1 ; 十氢萘:两个环共用两个碳
C1CC2CCCC2C1 ; 数字1和2分别标记两个环
C%10CCCCC%10 ; 10元环:用%10标记
C1C2C3C4C5C6C7C8C9C%10C1C2C3C4C5C6C7C8C9%10 ; 大环结构
C1CC1 是三元环(正确),C1CC2 少了一个配对数字,解析器会报错。我在批处理一整个化合物库时遇到过这种错误,一查是人工录入时漏写了数字。
各部分组合:一张图看懂SMILES逻辑
这张图把SMILES的四个核心要素联起来了。整个SMILES字符串由这四个部分组合构建。从原子开始,通过键连接成主干,分支用括号展开,环用数字闭合。
完整示例拆解
拿一个真实的分子,拆开看看:
CCOCC(O)CC(=O)O ; 一个含有羟基和羧基的醚
拆解开:
CCOCC— 主干:C-C-O-C-C,一个醚键(O)— 分支:在第三个C上挂一个羟基CC(=O)O— 继续主干,最后一个碳上挂一个羧基((=O)O表示双键氧再连一个羟基)
是不是清晰多了?
标准化工程里的实际收获
做SMILES标准化的时候,我习惯做三件事:
- 原子检查:确认所有元素符号大小写正确,方括号内的电荷、同位素格式标准
- 键验证:检查双键、三键的位置是否与分子图一致,避免误写
- 环结构闭合性检查:遍历所有环数字,确保每个数字都成对出现
C1CCCCC1(环己烷),有的是 C1CCCCC1 但分支写法不同。这种不一致会导致去重失败、索引错误。标准化的第一步,就是用工具把所有SMILES转成同一套规范表示。
SMILES语法的核心就这么四块。原子决定节点,键决定连接,分支处理非线性的侧链,环解决闭环问题。掌握这四块,你就能读懂90%以上的SMILES字符串了。