Open liujuanjuan1984 opened 4 years ago
最近遇到一个难点,把 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. "
加上正则后,就更复杂了。。
最近遇到一个难点,把 markdown 文本转换为 ipynb 文件,同时对 ipynb 文件进行正则搜索替换操作。期间反复遭遇嵌套了好几层的转义与反转义的情境,感到棘手,我也一直想认真梳理一下,今天且试试看。
第一层:从 markdown 文本转换为 ipynb 文件时,需要把一些特殊符号进行反转义。
首先,从一个最简单的例子说起。这段 markdown 文本中存在英文双引号。
生成 ipynb 文件时,需要对 markdown 文本中存在的英文双引号添加反转义符号。这是由于 ipynb 文件的语法是 json 样式的,双引号是非常关键的语法符号。
接下来,就可以说一个稍微复杂点的案例了。即,markdown 文本中,自带反转义符号。比如:
生成 ipynb 文件时,需要对 markdown 文本中自带的反转义符增加一层反转义。
实际上 markdown 文本中,就需要为反转义符添加一层反转义符,于是变成
\\"
才会显示为\"
那么上面这段 markdown 文本生成 ipynb 时,会有几个反转义符呢?答案是:5个。
"\"How are you?\" she asked. 在 ipynb 文件中因为增加了反转义符,文本将会变成:\\\\\"How are you?\\\\\" she asked. "