ucanuupnobb
ucanuupnobb copied to clipboard
从md到ipynb的转义与反转义
最近遇到一个难点,把 markdown 文本转换为 ipynb 文件,同时对 ipynb 文件进行正则搜索替换操作。期间反复遭遇嵌套了好几层的转义与反转义的情境,感到棘手,我也一直想认真梳理一下,今天且试试看。
第一层:从 markdown 文本转换为 ipynb 文件时,需要把一些特殊符号进行反转义。
首先,从一个最简单的例子说起。这段 markdown 文本中存在英文双引号。
"How are you?" she asked.
生成 ipynb 文件时,需要对 markdown 文本中存在的英文双引号添加反转义符号。这是由于 ipynb 文件的语法是 json 样式的,双引号是非常关键的语法符号。
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"How are you?\" she asked."
]
}
],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 2
}
接下来,就可以说一个稍微复杂点的案例了。即,markdown 文本中,自带反转义符号。比如:
这是一个新的例子,想在markdown文本中分别敲出:(英文圆括号)和\[英文中括号\],但中括号需要加上反转义避免被markdown语法解析为超链接。
生成 ipynb 文件时,需要对 markdown 文本中自带的反转义符增加一层反转义。
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"How are you?\" she asked.\n",
"\n",
"这是一个新的例子,想在markdown文本中分别敲出:(英文圆括号)和\\[英文中括号\\],但中括号需要加上反转义避免被markdown语法解析为超链接。\n"
]
}
],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 2
}
更复杂一点的是,我们在 markdown 文本中表达:
```markdown
"How are you?" she asked. 在 ipynb 文件中因为增加了反转义符,文本将会变成:\"How are you?\" she asked.
实际上 markdown 文本中,就需要为反转义符添加一层反转义符,于是变成\\"
才会显示为\"
"How are you?" she asked. 在 ipynb 文件中因为增加了反转义符,文本将会变成:\\"How are you?\\" she asked.
那么上面这段 markdown 文本生成 ipynb 时,会有几个反转义符呢?答案是:5个。
"\"How are you?\" she asked. 在 ipynb 文件中因为增加了反转义符,文本将会变成:\\\\\"How are you?\\\\\" she asked. "