SMILES语法基础:原子、键、分支、环的表示方法

SMILES不是天书,它有一套非常清晰的语法规则。说白了,就是用一串字符,把分子结构“写”出来。我刚开始接触时也觉得这东西挺玄乎,但一旦理解了它的设计思路——哦,原来如此。

SMILES的核心要素就四个:原子、键、分支、环。这四个要素组合起来,就能表示几乎所有有机分子。咱们一个一个拆开看。

一个实用观点:SMILES本质上是用ASCII字符对分子图做深度优先遍历。记住这一点,很多看似奇怪的写法就好理解了。

原子表示法:既简单又苛刻

大多数有机原子直接用元素符号表示。碳就是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   ; 手性碳,带旋向标记

个人习惯是:如果原子是常见有机元素且不带电荷,不写方括号;否则老老实实加方括号。标准化工具里的一个常见坑就是漏掉方括号里的内容。

原子表示避坑指南:我曾经在清洗一批化合物数据时,发现5%的条目解析出错。查了半天——原来是 [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字符串 原子 (Atoms) 元素符号 方括号:同位素/电荷/手性 大写脂肪族/小写芳香族 如:C, N, [Fe+2] 键 (Bonds) 单键:相邻原子(默认) 双键:= 三键:# 分支 (Branches) 括号 () 包裹侧链 可嵌套、可并列 如:CC(C)C 环 (Rings) 数字标记成对出现 1-9:直接数字 ≥10:%数字

这张图把SMILES的四个核心要素联起来了。整个SMILES字符串由这四个部分组合构建。从原子开始,通过键连接成主干,分支用括号展开,环用数字闭合。

完整示例拆解

拿一个真实的分子,拆开看看:

CCOCC(O)CC(=O)O     ; 一个含有羟基和羧基的醚

拆解开:

  1. CCOCC — 主干:C-C-O-C-C,一个醚键
  2. (O) — 分支:在第三个C上挂一个羟基
  3. CC(=O)O — 继续主干,最后一个碳上挂一个羧基((=O)O 表示双键氧再连一个羟基)

是不是清晰多了?

标准化工程里的实际收获

做SMILES标准化的时候,我习惯做三件事:

  • 原子检查:确认所有元素符号大小写正确,方括号内的电荷、同位素格式标准
  • 键验证:检查双键、三键的位置是否与分子图一致,避免误写
  • 环结构闭合性检查:遍历所有环数字,确保每个数字都成对出现
批次一致性案例警示:我在一个药物分子库的标准化流程中发现,同一个化合物在不同批次中SMILES写法不一致。有的是 C1CCCCC1(环己烷),有的是 C1CCCCC1 但分支写法不同。这种不一致会导致去重失败、索引错误。标准化的第一步,就是用工具把所有SMILES转成同一套规范表示。

SMILES语法的核心就这么四块。原子决定节点,键决定连接,分支处理非线性的侧链,环解决闭环问题。掌握这四块,你就能读懂90%以上的SMILES字符串了。