SMILES字符串结构:分支、环、芳香性、同位素、手性

老实说,刚开始接触SMILES的时候,我也觉得这东西跟天书似的。c1ccccc1 —— 不就六个碳围成一圈嘛?但真到项目里处理百万级分子库时,才发现一个括号放错位置,整个分子解析就崩了。这一章咱们就把SMILES的"骨骼"拆开看看。

你想想看,一个字符串怎么描述复杂的三维分子?说白了,靠的就是几个基础语法单元的灵活组合。

核心记忆点: SMILES 本质上是一种线性编码,它通过特定的符号规则,把分子结构压缩成一个字符串。分支、环、芳香性、同位素、手性,就是这套编码的"语法零件"。

2.1 分支结构

分支是SMILES里最常见的结构,写法其实特别简单——用括号 () 包起来就好。我刚开始做的时候,脑子里总把它想象成"树枝":主干上的原子,如果有侧链,就用括号把侧链括起来。

举个例子,异丙醇 CC(C)O。主干是 CCO,中间那个碳上连了一个甲基分支,所以写成 C(C)O。实际写的时候,括号里的内容是一个完整的子结构。

这里有个我反复踩过的坑:

  • 分支嵌套:括号可以套括号,比如 CC(C)(C)C 表示一个季碳连了两个甲基
  • 分支顺序:多个分支写在同一级时,顺序不影响结构
  • 括号紧贴:分支紧跟在它连接的原子后面,不要加空格
我的习惯:写复杂分子时,我通常会先在纸上画结构式,再"翻译"成SMILES。这样不容易漏掉括号。

看一下几种常见分支的写法:

分子结构SMILES
异丁烷C-C(C)-CCC(C)C
叔丁醇C-C(C)(C)-OHCC(C)(C)O
2-甲基丙酸C-C(C)-C(=O)OCC(C)C(=O)O

2.2 环结构

环的表示方法更巧妙。每个环上的原子,用数字标记"这个位置要连回去"。数字从1开始,可以是两位数(超过10个环时用 %10 这种格式)。

我记得之前在项目中处理过一个大环分子,有8个环编号,光对环号就对了好久。后来我学乖了,写环SMILES前一定先数清楚环的数量。

基本规则:

  • 数字配对:同一个数字出现两次,表示这两个原子之间形成单键
  • 数字可重复使用:但同一对数字只能出现两次
  • 大于9的环号:用 %10、%11 等

实际例子:

# 环己烷(C6H12)的简易写法
C1CCCCC1

# 苯环(C6H6)的凯库勒式写法
C1=CC=CC=C1

# 十元环
C1%10CCCCCCCCC%101

# 螺环结构
C1CC2(C1)CCCC2
曾经踩过的坑:有一次解析一个含13个环的天然产物,有人用了两个相同的数字表示不同的环对。结果怎么都对不上环。后来才意识到,环编号必须全局唯一,一个数字不能代表两个不同的环键。

2.3 芳香性

SMILES 里用 c(小写)表示芳香碳,n(小写)表示芳香氮。这是很多初学者容易搞混的地方。芳香环的SMILES通常比凯库勒式更短、更清晰。

常见的芳香环:

# 苯
c1ccccc1

# 吡啶
c1ccncc1

# 呋喃(芳香写法)
c1ccoc1

# 嘧啶
c1cncnc1

我个人习惯,对含多个芳香环的稠环分子,一定用芳香写法。为什么?因为容易读,也容易标准化。比如萘:

# 凯库勒式写法
C1=CC=C2C=CC=CC2=C1

# 芳香写法(推荐)
c1ccc2ccccc2c1

你看出区别了吧?芳香写法少了双键标记,结构更紧凑。我一般标准化时,都会把可芳香化的环转成芳香写法。

一个实用技巧:RDKit 的 MolToSmiles 默认会输出芳香SMILES,但凯库勒式通常用于某些旧版分子格式。做去重时,建议统一为芳香SMILES,避免同一结构有两种表示。

2.4 同位素

同位素的表示方式很简单——在原子符号前面加质量数。比如 [13C] 表示碳-13,[18O] 表示氧-18。这里注意要用方括号括起来,哪怕是非金属原子也不例外。

实际应用中,同位素标记多用于质谱和代谢研究。我在做代谢物数据库时接触过不少这样的分子。

# 碳-13标记的甲烷
[13CH4]

# 氘代氯仿
[2H]C(Cl)(Cl)Cl

# 双标记的乙醇
[13C]C([18OH])O

有一个要点:同位素标记原子的连接顺序不能变。比如 [13C]C 和 C[13C] 是两个不同的分子。

2.5 手性

手性是SMILES标准化里最容易出问题的地方。SMILES用 @ 或 @@ 表示手性中心的方向。一个 @ 表示顺时针(从手性中心对面看),两个 @@ 表示逆时针。

我刚开始做时总搞混这两个符号,后来想了个笨办法:用一个瓶子来记。你想象你站在瓶子外面,瓶塞盖子朝向你——

  • @ :像瓶子的塞子朝你顺时针转
  • @@ :两个塞子朝你逆时针转

记住,这个方向取决于原子在SMILES字符串中的书写顺序。

# L-丙氨酸的两种写法
# 第一种(@)
N[C@@H](C)C(=O)O

# 第二种(@@)
N[C@H](C)C(=O)O

以前我在做手性分子去重时,发现同一个分子居然能写出四种不同的SMILES,只是因为手性方向的顺序不同。后来统一标准时,我们规定所有手性中心都用 @@ 表示,然后再排序。

注意:SMILES 本身不保证手性方向的唯一性。两个SMILES字符串不同,不代表手性不同。做去重时,必须先把手性中心标准化。

2.6 结构一览

下面这张图,把这些语法元素的关系梳理了一下。

SMILES字符串结构要素 SMILES字符串 分支 ( ) 环 数字 / %数字 芳香性 c / n 同位素 [13C] 手性 @ / @@ 原子 O / N / S / P 关键说明 分支、环、芳香性、同位素、手性共同定义了一个SMILES字符串的结构 同一分子的不同SMILES表示可标准化为规范形式 规范SMILES是实现分子去重的基础

这张图清楚展示了SMILES的结构层次。中心是字符串本体,外围的六个要素:分支、环、芳香性、同位素、手性、原子符号,共同拼接成完整的分子描述。

嗯,总结一下就是:SMILES 不是随随便便把原子串起来就完事。它内在有一套语法规则,理解了分支、环、芳香性、同位素和手性这五个基础概念,你才能写出真正"标准"且适合去重的SMILES。