中英文之间的空格处理

news/2025/1/16 0:55:10/

问题描述

第一次使用 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 字符类完成。可以使用普通字符类完成。


http://www.ppmy.cn/news/911703.html

相关文章

【Unity3D自学记录】Unity3D之KeyCode键值

Backspace 退格键 Delete Delete键 TabTab键 Clear Clear键 Return 回车键 Pause 暂停键 Escape ESC键 Space 空格键 Keypad0 小键盘0 Keypad1 小键盘1 Keypad2 小键盘2 Keypad3 小键盘3 Keypad4 小键盘4 Keypad5 小键盘5 Keypad6 小键盘6 Keypad7…

【C++】C++11--右值引用

文章目录 C11 --- 右值引用右值 and 左值左值引用 and 右值引用右值引用的使用场景和意义右值引用和移动语义右值引用左值 完美转发万能引用完美转发保持属性 C11 — 右值引用 右值 and 左值 左值是什么 左值是一个表示数据的表达式,比如变量名和可以解引用的指针 …

cesium的使用

cesium的使用 cesium的使用创建一个vue项目 vuevitecesium参数的使用常用点位标记删除动态渲染路线借助truf.js的算法进行渲染地块的实现topojson cesium的使用 1.下载或者安装cesium的插件 官方文档 下载下来后创建文件夹整个包引入 2.生成token 新的包应该有默认token如果没…

俄罗斯方块,消消乐源码下载

这些小游戏是java做的,参考源码,可以用C、安卓实现。 按照复杂程度区分版本,方便初学者学习。做的时候很匆忙,是为了教学演示。如果要改进,还是用设计模式、解耦、状态和标志,仍然是基于游戏的MVC结构&…

符号消消乐

最近看到的一道机试题,输入一个只包含英文字母的字符串,字符串中的俩个字母如果相邻且相同,就可以消除。在字符串上反复执行消除的动作,直到无法继续消除为止,此时游戏结束。输出最终得到的字符串长度 package com.cl…

开心消消乐在屏幕中向下移动的完整代码

#--coding:utf8-- import random import pygame as pgWIDTH 400 HEIGHT 400 NUMGRID 8 GRIDSIZE 36 XMARGIN (WIDTH - GRIDSIZE * NUMGRID) // 2 YMARGIN (HEIGHT - GRIDSIZE * NUMGRID) // 2# 加载图片 gem_imgs [pg.image.load(resources/images/gem{}.png.format(i))…

消除类游戏

数组 ** xdoj-消除类游戏** #include<stdio.h> int main() {int n, m, i, j;scanf("%d%d",&n,&m);int a[30][30], b[30][30];for(i0;i<n;i){for(j0;j<m;j){scanf("%d",&a[i][j]);b[i][j] a[i][j];}}for(i0;i<n;i){for(j0;j…

Python学习:方块消除游戏

【编程题&#xff1a;方块消除游戏】 emmmm..依然牛客网上的题&#xff0c;难度标识才一颗星&#xff0c;但是感觉自己看代码看了好久才理解实现的过程。 题目描述&#xff1a;如下图&#xff0c;有10*10个不同颜色的方块&#xff0c;每个方块可能是红、绿、蓝、黄、紫5种颜色…