批量调整紧凑换行的格式

Posted by 雯饰太一 on January 14, 2024

1 问题描述

在使用github.io创建自己的博客,且使用Obsidian进行内容编辑的时候,通产会使用一个回车键位进行换行,我将其成为“紧凑换行”,对于紧凑换行而言,在博客上显示的时候是没有换行的,需要主动的在使用紧凑换行的时候添加上两个空格才行。

在github上进行评论,或者是在提交git请求填写内容的时候,都会有这个问题,填写的内容,可能的格式如下:

1
2
3
4
5
测试提交

1、这里是测试的内容  
2、这里是测试的内容2  
3、这里是测试的内容3  

通常上述内容在git上显示的时候是没有换行的,开始以为是网页端显示的问题(真是可笑)

2 解决方案

使用sublime text3对其中的内容批量替换,替换的规则如下:

1
查找某些末尾不是‘空格空格回车’且下一行不是空行的内容

正则表达式如下:

1
[^\s]{2}\n(?!\n)

解释:

  • [^\s]{2}:匹配两个非空白字符
  • \n:匹配换行符
  • (?!\n):使用负向先行断言,确保后面不是一个空行

但是我的需求比较特殊,我整理了一批文案句子,这些句子之间是使用***进行的分隔,如下情况则不应当处理:

1
2
3
4
***
这是一段测试内容
这是测试内容2

上面内容应该只检测出来第三行才对,使用的正则表达式如下:

1
^(?:(?!\s\s$|\*\*\*$).)+$\n(?!\n)

解释:

  • ^:表示行的开头

  • (?: ... ):非捕获分组,用于分组多个模式

  • (?!\s\s$|\*\*\*$):负向先行断言,确保后面不是以不是两个空格,或者是三个星号

  • .:匹配任意字符

  • +:表示匹配一次或多次

  • $:表示行的结尾

在正则表达式中使用 ^$ 可以确保你的模式完全匹配一行的内容,而不是部分匹配。例如,^pattern$ 表示整行内容必须完全匹配 pattern

如果你在匹配行末尾时也使用了 $,那么这是为了确保你的模式不会部分匹配行。这可以帮助你避免匹配到包含你所寻找的模式的行的一部分。

3 弊端

仅仅对于文字性质的内容匹配是有效的,对于具备代码、公式的情况,表格等情况,匹配起来还是会有问题,也不能识别ymal标识内容。