问题

书中某一章有一些表格,译者没有使用扩展Markdown的表格标记,而使用代码标记和空白(空格或制表符),手工分了出行和列。源代码如下所示:

enter image description here

预览结果是这样的:

enter image description here

我们的目标是把上面的源代码,修改成如下所示:

名字|重量(公斤)|腿的条数|颜色|适合做宠物吗?
-|-
Fido|20.5|4|棕色|是
Mr. Slither|3.1|0|绿色|否
Nemo|0.2|0|棕黄色|是
Dumbo|1390.8|4|灰色|否
Kitty|12.11|4|灰色|是
Jim|150.9|2|棕黄色|否
Millie|0.1|100|棕色|否
McPigeon|1.0|2|灰色|否
Spot|10.0|4|棕色|是

而结果如下所示:

enter image description here

分析

因为表格的标记就是用竖线(|)分隔列,所以问题的关键是怎么在每个单元格内容的两侧加上竖线。显然,通过手工很费事。这种替换使用正则表达式可以轻松地完成。

方案

把源代码复制到Sublime中

enter image description here

按Ctrl+H打开“查找替换”工具,用*替换\n\n是换行符,这里先替换成星号(*)。点击“Replace All”(全部替换)后,结果如下:

enter image description here

这样,就可以放心地把所有空白符替换成竖线了。\s{2,}表示要替换两个以上的空白符(\s表示空白符),因为Mr. Slither中间有1个空格,不能替换:

enter image description here

替换后结果如下:

enter image description here

此时,可以把星号替换回换行符(\n)了:

enter image description here

替换后,我们发现还有三处空白译者用的是制表符,再替换一次:

enter image description here

结果如下:

enter image description here

接下来把每行行首的竖线替换成空白:

enter image description here

结果如下:

enter image description here

最后,再在第一行和第二行之前添加-|-即可:

enter image description here

这就是我们想要的结果了。