第4章 链结构与分支:线性链、圆括号分支
SMILES 的核心其实就两样东西:线性链和分支。说白了,一个分子就是原子的链条,遇到支链就用圆括号括起来挂上去。我刚开始学 SMILES 的时候,总觉得分支很绕,后来弄明白括号的“附着点”就好办多了。
4.1 线性链:一根绳子串到底
线性链最简单。原子一个接一个写,默认单键连接,不用写键符号。比如丙烷三个碳直连:
CCC
丁烷就是四个碳:
CCCC
嗯,这里有个小细节——单键默认,双键和三键必须显式写。乙烯是:
C=C
乙炔是:
C#C
我遇到过新手把乙烯写成 C-C,结果解析出来变成乙烷。记住,没写符号就是单键,别多此一举。
对于烷烃链,还有一种常见写法是给原子加编号(方括号数字),但基础线性链不需要。
4.2 圆括号分支:给链条装侧枝
圆括号很重要。它表示从当前原子出发,挂一个子结构。比如异丁烷,中心碳连三个甲基:
CC(C)C
怎么读?从左边第一个碳开始:C(主链第一个碳),紧接着第二个碳C,然后遇到左括号(,表示从它前面的碳(第二个C)分出一个分支,分支内容 C 就是一个甲基,右括号结束分支;最后还有一个 C 是主链的延续。所以结构是 C-C(C)-C,中间碳连两个甲基加一个乙基?不对,实际上异丁烷是 C(C)(C)C? 等等,上面这个 CC(C)C 其实等价于 C(C)(C)C?我重新捋一下:
- 标准异丁烷(2-甲基丙烷)SMILES 是
CC(C)C。解读:第一个C,第二个C(主链第二个),括号从第二个C分出分支C,然后主链继续第三个C。所以主链只有三个碳?实际上主链丙烷,中间碳上挂一个甲基。对的,没错。 - 如果写
CC(C)(C)C则中间碳挂两个甲基,那是新戊烷(2,2-二甲基丙烷)。
看个例子,乙醇(乙醇)的 SMILES 是 CCO,线性。异丙醇(2-丙醇)就是:
CC(O)C
中间碳上挂一个羟基。括号里的 O 就是分支。
4.3 嵌套分支与复杂结构
分支里还可以有分支。比如 2-甲基丁酸(3-甲基丁酸?)。我记得有一个常见分子 3-甲基戊烷:
CC(C)CCC
解读:主链有一个分支甲基挂在第二个碳上,后面再接三个碳。如果分支里还有分支,比如 2,3-二甲基己烷:
CC(C)C(C)CCC
括号可以连续出现,也可以嵌套。写的时候一定要注意括号配对,我早期调试时经常少一个括号导致整个 SMILES 解析失败。
还有一点:分支可以出现在任何位置。比如羧基乙酸(乙酸)的 SMILES 是 CC(=O)O,这里等号表示双键,括号里是双键氧,然后还有一个羟基分支?实际上 CC(=O)O 里面括号并不是分支,而是一种特殊写法:等号后面跟的括号表示官能团。严格来说,=O 不是圆括号分支,但 O 在括号里表示酮基。这个有点绕,但我们可以记住:等号、三号键后面如果跟括号,括号内容属于该键连接的基团。
为了更清晰,我整理了一个对比表格:
| 结构类型 | SMILES 示例 | 说明 |
|---|---|---|
| 线性烷烃 | CCCC |
直链丁烷,四个碳 |
| 单分支 | CC(C)C |
异丁烷,中间碳挂一个甲基 |
| 双分支 | CC(C)(C)C |
新戊烷,中间碳挂两个甲基 |
| 含杂原子分支 | CC(O)C |
2-丙醇,羟基在第二个碳上 |
| 嵌套分支 | CC(C(C)C)C |
2,3-二甲基丁烷?实际表示有点复杂,但嵌套有效 |
C(C)(C)(C)C 想表示季戊四醇(五个碳),结果解析出来是个奇怪的东西。后来才知道每个括号只能从当前原子分出一个分支,要表示多个相同分支可以连写括号,但一定要对应正确的连接点。
4.4 分支优先级与顺序
SMILES 没有严格的优先级规则,但圆括号分支优先附着在它紧前面的原子上。比如 CC(C)C 中,括号属于第二个C。如果想让分支附着在第一个C上,就要写成 C(C)CC。我建议写的时候从左到右逐原子构建,避免混淆。
另外,分支可以写成链的一部分,比如 CCC(C)C 是 3-甲基戊烷?我们分析一下:
- 前三个C为主链:C-C-C
- 括号从第三个C分支出一个C
- 最后还有一个C
- 所以主链变成 C-C-C 之后又加一个C,实际上是 C-C-C(C)-C,即 2-甲基戊烷?等等,第三个碳分支出一个甲基,主链再延伸一个碳,结果是 3-甲基戊烷?数一下:主链五个碳,甲基在第三位:C-C-C(C)-C-C。嗯,没错。
总之多写多练,心里默念“谁前面就挂谁”。
4.5 内联 SVG:线性链与分支结构对比
下面这张图用三种结构帮你直观理解:线性丙烷、单分支异丁烷、双分支新戊烷。我特意把括号的附着点标示出来。
4.6 常见错误与避坑指南
- 括号不配对:少一个右括号,整个 SMILES 就是无效的。我曾经在一串长链里漏了一个括号,调了半天才发现。
- 分支附着点搞错:
CC(C)C和C(C)CC是两种不同的分子。前者是异丁烷,后者是 2-丁烯?实际上C(C)CC代表乙基挂在一个碳上,再连两个碳——那是 2-甲基丁烷?自己试试虚拟解析。 - 分支太长时阅读困难:建议用换行或注释(虽然 SMILES 不支持注释,但可以逻辑上分段写)。我习惯先把主干写出来,再插入括号。
- 忽视顺序:SMILES 是线性的,但同一分子可以有多种规范写法(如规范 SMILES 和任意 SMILES)。不过分支的括号位置必须准确反映连接。
答案(不展开):
CC(C)(C)C(C)C 。
好了,这节课的核心就是:线性链只管顺序写,遇到支链就用圆括号包裹并挂在前一个原子上。记住括号的“附着”逻辑,再复杂的分子也能拆解。下次遇到长链+分支,先找主链,再一个个加括号,别慌。