中英文之间的空格处理

问题描述

第一次使用 markdown 开始,中英文之间的空格就是让我头疼的一个问题。在使用 latex 时,中英文之间的空格会自动处理。这让我以为撰写其它格式的文档时也会有相同的处理方式,可我最终发现这不过是我自己一厢情愿的想法罢了。

我做的尝试

全半角的切换

今天,我开始尝试解决这个问题。经过一系列的努力发现我其实可以通过半角与全角的切换来完成。

以前我一直使用全角标点,这样造成的问题是在进行中英文混排时,中英文的切换频繁,效率低下。中英文之间的空格也让我头疼不已。

今天我发现,可以通过将符号调整为半角来提高输入的效率。当使用半角符号时,输入的空格为标准空格,在中文模式下也可以直接输入英文。当使用全角时,中文输入模式下的空格为全角空格,输入一个半角空格需要切换输入模式为英文。这算是一大改善吧!

尝试使用 sed 来解决

我也尝试使用 sed 来解决这个问题。不过由于 sed 对于 unicode 的匹配支持的相对薄弱,我无法找到一个直接的方式来处理中英文之间的空格。多次尝试无果后,我决定换一种思路,使用反向选择的方式来解决这个问题。

我想既然我不能直接匹配到中文字符,那么我能不能通过反向匹配除了中文之外的字符来达成呢?事实证明这一点能够做到。依靠 POSIX 字符类我就能使用反向匹配来匹配到中文字符。

这里我首先将自己已经排版好的文章转换为缺少空格的内容。使用的 sed 命令如下

s/\([[:upper:][:lower:][:digit:][:punct:]]\+\)[  ]\+\([^[:upper:][:lower:][:space:][:punct:][:digit:]]\)/\1\2/g
s/\([^[:upper:][:lower:][:space:][:punct:][:digit:]]\)[  ]\+\([[:upper:][:punct:][:lower:][:digit:]]\+\)/\1\2/g

添加空格的命令如下:

 s/\([[:upper:][:lower:][:digit:]]\+\)\([^[:upper:][:lower:][:space:][:punct:][:digit:]]\)/\1 \2/g 
 s/\([^[:upper:][:lower:][:space:][:punct:][:digit:]]\)\([[:upper:][:lower:][:digit:]]\+\)/\1 \2/g

局限性

由于 [:punct:] 会匹配半角与全角符号,在中文环境中全角符号后不需要添加空格,半角符号前后需要添加空格。对半角符号前后空格的添加无法使用 POSIX 字符类完成。可以使用普通字符类完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值