使用正则表达式进行中英混排
2018-05-17 本文已影响37人
7okis
中英混排的一个要点是,英文单词/数字/表达式与汉字相邻时,应引入空格分开。
比如:
$S^\prime$对FIFO存在Belady现象
应修改为:
$S^\prime$ 对 FIFO 存在 Belady 现象
微软的 Word 可以自动完成,而且如果原来已有空格,不会造成影响。
在其他的编辑器上,我们可以使用正则表达式实现这样的效果
(?<![\x00-\x7F])([\x00-\x09\x0B-\x1F\x21-\x7F]+)(?![\x00-\x7F])
可以选中所有这样的单词/数字/表达式,并将单词捕获,使用
\1
替换即可完成。
注意是一个空格,接着一个\1,再加上一个空格。
这里主要利用的是,英文使用ascii编码,这里假设ascii范围外的均为应用空格隔开的字符。
([\x00-\x09\x0B-\x1F\x21-\x7F]+)描述了一个或多个ascii码组成的序列。但其中不存在换行(\n,\x0A)以及空格(,\x20)
。
我们希望选中的序列两侧都是非ascii字符,因此使用逆序环视和正序环视,表达两侧均非ascii编码。
至此,我们已能选中两侧均非英文字符的序列。删去其中一个环视,可以选择单侧,替换时也做相应修改即可。
将来也许将三者结合到一起,不过目前已足够使用。