Notepad++正则表达式与列编辑:文本排版清洗实战指南
2026/9/9 3:02:05 网站建设 项目流程

写这篇指南的起因,是我帮朋友处理一本两百章的TXT小说。原稿里到处都是全角空格、半角标点、零星空行,还有从不同网站复制过来后残留的乱码标记,手动修完估计要一整个晚上。我在Notepad++里用正则替换加列编辑,半小时左右就全部理干净。后来我意识到很多人提到“排版”就想到Word、InDesign、PS,但真正拖后腿的往往是源头文本太脏。Notepad++虽然常被当成代码编辑器,它在文本整理、格式清洗和中英混排这类“排版前半程”里,反而是效率最高的工具之一。

这篇内容不打算讲那些人尽皆知的“打开文件、查找替换”基础操作,而是围绕几个高频排版场景,把我实测过的正则、列编辑、宏脚本和导出流程一次讲透。适合需要批量处理TXT、做中英混排内容、整理论文素材,以及每天跟乱七八糟文本打交道的人。

1. 排版的第一步不是调字体,而是把内容“洗干净”

很多人在Word里花大量时间调字号行距,却忽略了从网页、PDF、微信聊天记录里复制过来的文本本身是“脏”的。编码乱码、空行失控、行首行尾带着不可见空格,这些问题不解决,后面所有排版动作都会被带偏。我在Notepad++里的习惯是,先做一个“清洗三部曲”。

1.1 编码混乱:为什么打开就是乱码

打开一个TXT或日志文件,看到满屏锟斤拷中,第一反应不是关掉文件,而是先看Notepad++右下角显示的编码。Windows老系统常用的ANSI(GB2312/GBK)和Linux/macOS常见的UTF-8是两套完全不同的解码方式,文件本身没坏,是编辑器猜错了字符集。

操作路径很简单:先点菜单栏的“编码”,如果当前按UTF-8解析乱码,就换“使用ANSI编码”重新读取;反过来也一样。确认内容正常后,再执行“转为UTF-8编码(无BOM)”。这里特别提醒一下BOM(Byte Order Mark)的问题:UTF-8带BOM时,文件开头会有几个不可见字节,如果这份文本要放到网页或某些程序里,可能会在第一个字符前多出一个空白行或特殊符号,保存时选“无BOM”更稳妥。

处理编码这件事没有统一公式,因为同一个文件在不同系统里生成情况都不一样。我现在遇到乱码,先花十秒钟试ANSI和UTF-8两种解析,再考虑GB18030,大多数文本都能救回来。

1.2 空行和行尾:先统一“路面”再开车

空行是排版里最不起眼却最影响观感的东西。连续多个空行会让文档像破棉袄一样到处漏风。Notepad++在“编辑”菜单里有一组“行操作”功能,直接有“移除空行”和“移除空行(包括空白字符)”。后者连那些看起来是空行、其实里面藏着几个空格或Tab的行也一并清理,这是我用得最多的一个命令。

如果要把两段文本合并成一段,比如从PDF复制的句子被强行拆成多行,可以用“行操作”里的“合并行”,或者直接在查找替换里把换行符换成空格。这里要注意Windows换行是\r\n,Unix/Linux是\n,Notepad++在右下角状态栏会显示当前文件是CRLF还是LF。如果一篇文章在Windows上打开却显示LF格式,通常是从网络或Linux服务器上下载的。建议通过“编辑”菜单里的“行尾转换”统一成Windows格式,避免后续正则匹配\r\n时找不到目标。

1.3 全角空格、行首行尾空白:看不见的“脏东西”

接手别人发来的文档时,我最常见的问题就是行首有几个全角空格,行尾还挂着半角空格。从网页复制的内容尤其严重。处理之前,先打开“视图”菜单里的“显示符号”,勾选“显示空格与制表符”,把看不见的字符显形。这一步非常重要,肉眼看不到空白,正则做得再多也容易漏。

然后分两步替换:

  • 删除行首空白:查找目标填^[ \t]+,替换为空。
  • 删除行尾空白:查找目标填[ \t]+$,替换为空。

注意\t代表Tab键。如果你看到的是全角空格(中文输入法按下空格键产生的 ),可以复制这个字符直接粘到查找框里,或者用Unicode写法\x{3000}。部分Notepad++版本对\x{}写法支持程度不同,直接粘贴全角空格字面量是最稳妥的。

这三步走完,文本基本就是“干净”状态。后面无论是加粗、对齐还是导出,都不会再被隐藏符号干扰。

2. 中英混排自动加空格:两个正则替换搞定

中文排版里有一条不成文的阅读习惯:中文和英文、中文和数字之间最好留一个空格,比如“Notepad++ 是一款强大的编辑器,支持 Python 脚本”。这样视觉上更透气,也不会让中英文粘成一团。手动给一整篇文档加这些空格能累死人,这个场景对应的正是网上搜“typora中英文一键排版”时大家想要的自动方案。在Notepad++里,两条正则替换就能完成。

2.1 两个正则,精确处理“中文在左”和“中文在右”

先把原始文本转成这样:

原始:Notepad++是一款免费的文本编辑器,支持Python和JavaScript。目标:Notepad++ 是一款免费的文本编辑器,支持 Python 和 JavaScript。

在Notepad++的查找替换对话框里,勾选“正则表达式”模式,执行两组替换:

查找目标:([一-龥])([A-Za-z0-9])替换为:$1 $2

查找目标:([A-Za-z0-9])([一-龥])替换为:$1 $2

这里的[一-龥]是汉字Unicode范围的一个直观写法,表示从“一”到“龥”的所有中文字符。第一组处理“中文后面紧跟字母或数字”的情况,第二组处理“字母或数字后面紧跟中文”的情况。$1$2是正则里的反向引用,分别对应前面括号里捕获到的内容,替换结果就是在中间插一个空格。

有人担心这个正则会不会把连续英文拆成单个字母。实测下来不会。比如“中文IPv6协议”,第一组正则匹配“文”和“I”,替换成“文 I”后,后面的“P”“v”“6”不会被拆开,因为每次替换消耗的字符不会导致内部字母被重复扫描。最终你会得到“中文 IPv6 协议”,正是想要的效果。

数字、百分号、美元符号这类字符也可以放进第二组字符集。如果文本里还有“C++”“C#”这类带符号的单词,建议把[A-Za-z0-9]扩展成[A-Za-z0-9+#],避免漏掉。

2.2 顺手解决中文标点的“半角转全角”

中英混排的另一个痛点是,很多人输入中文时顺手打了半角逗号、半角句号。中文字串里出现半角标点,视觉上会显得轻飘飘的,和旁边汉字完全不在一个重量级。清理规则也简单,只处理那些夹在两个汉字中间的半角标点:

查找目标:([一-龥]),([一-龥])替换为:$1,$2

查找目标:([一-龥])\.([一-龥])替换为:$1。$2

查找目标:([一-龥])!([一-龥])替换为:$1!$2

直接在正则里替换为中文标点字符即可。注意不要把英文句子里的逗号和句号也误伤,所以限定标点两边都必须是汉字,这样“5.0版本”这类数字中间的点不会被动。

2.3 替换之后,一定要做的两件事

第一,替换前备份原文件。正则批量替换是不可逆操作,Notepad++的撤销虽然能撤销几百步,但如果你连续跑了多个替换,中间状态很难精确回到。我一般复制一份文件,命名为xxx_原始备份.txt,再开始处理。

第二,用“查找全部”快速抽查。替换完成后,在查找框里搜[A-Za-z]{2,}[一-龥]之类的模式,看看是否有中英文边界被漏掉。再随手翻几个段落,确认没有把URL、文件路径里的内容也插进空格。如果原文里有大量网址,建议先把网址整体提取出来或跳过处理,否则“http://example.com”这类内容也会被规则碰过。

3. TXT章节目录排版:把一本乱糟糟的书整理成能检索的结构

网上搜“txt章节目录排版”,多半是喜欢在手机、阅读器上看小说的朋友,想把手头一部长篇TXT的章节目录整理干净。这类文件通常是从不同渠道拼出来的,章节标题格式五花八门,有的带“第1章”、有的带“Chapter 12”、有的前面还有一串无意义的空格和数字。Notepad++在这个场景里仍然是主力工具。

3.1 用正则加书签,一键定位所有章节标题

一次性匹配常见的章节标题,可以用这个模式:

^[ ]*第[0-9一二三四五六七八九十百千零〇]+[章回节卷部篇][^\r\n]*

它在每一行开头定位“第X章/回/节/卷/篇”。打开查找框,勾选“正则表达式”,填入模式,点击“查找全部”。如果文件里的小说章节标题比较规整,查找结果面板会列出所有匹配行,双击任意一行就能跳转。这就是一个快速导航目录,不需要手动滚动几百行去翻。

如果你的TXT里是“Chapter 1”“Chapter 2”这种英文标题,就把模式改成^[ ]*Chapter\s+\d+.*。如果是“序章”“楔子”“第一章 风起”这种没有编号的,可以放宽成^[ ]*第[一二三四五六七八九十百零]{1,}[章],或者干脆只匹配“章”字结尾的行。正则表达式允许反复试,边试边看查找结果列表,直到把该匹配的标题都覆盖到。

3.2 生成一份可以复制的目录清单

找到章节标题之后,如果只是想生成一个纯文本文档目录,可以用“书签”功能。先把所有章节标题行标记成书签:在查找对话框找到“标记”标签页,填入章节匹配正则,点击“标记全部”。然后打开“搜索”菜单里的“书签”子菜单,选择“复制带书签的行”。Notepad++会把所有带书签的行复制成一个新文档,你把它保存成一个目录.txt,就是一份干净的章节列表。

此时可以用“编辑”菜单里的“列编辑”功能给目录加编号。把光标放在目录第一行的行首,按下Alt+Shift+向下方向键,向下选中所有行,然后在“编辑”菜单点“列编辑”,选择“编号”插入,设置起始数字为1,步长为1。这一步能在目录每一行前自动插入递增序号,不用手动敲。

3.3 统一章节编号与层级缩进

很多TXT文件里,正文段落和章节标题之间的空格、缩进完全不一致。比如有的标题前有两个全角空格,有的没有。为了统一,可以用正则把章节标题行的前导空格删干净:

查找目标:^[ ]{2,}(第[0-9一二三四五六七八九十百千零〇]+[章回节卷部篇])替换为:$1

如果是章节需要统一左缩进两个空格,可以反过来操作。我个人的做法是:一级章节标题不缩进,二级小节缩进两个全角空格,三级小节缩进四个半角空格。这样视觉层级清晰,复制到阅读器或文档软件里也容易识别。

4. 列编辑与多光标:对齐场景下的“高速键”

排版里经常出现这种需求:几十行内容,需要在每行相同位置插入一段文本,或者在每一段前面加上序号。一行一行手动改不是不行,但效率太低。Notepad++的列编辑模式和Sublime Text的多光标功能,能把这类重复操作压缩到几秒内完成。这也是很多人搜索“sublime 自动排版”时会连带关注Notepad++的原因,两者思路其实是相通的。

4.1 Alt+拖拽:列选择的入门操作

普通文本选择是按行连续选中,按住Alt键拖动鼠标,则可以选择一个矩形区域。比如一段名单:

张三 13800000000 李四 13911112222 王五 13733334444

把光标放在第一行“张”字前面,按住Alt往下拖到第三行“王”字前面,你就同时选中了三行的前两个字符。此时直接按Delete,能同时删除这三列字符;直接输入文字,则会在每一行的同一位置都插入相同内容。这个功能在整理代码注释、统一删除表格里的某一列时极其好用。

如果鼠标拖拽不够精确,也可以用键盘操作:按住Alt+Shift,再配合上下左右方向键扩展矩形选区。配合“编辑”菜单里的“列编辑”对话框(快捷键Alt+C),可以给选中的矩形区域统一插入递增数字、当前日期或者任意固定文本。

4.2 用列插入,批量加序号和占位符

给几十个段落标题加编号,是典型的列插入场景。先把光标放在第一行标题的最前面,按住Alt+Shift+向下方向键,让选区覆盖所有需要编号的行。打开“列编辑”,选择“编号”,设置初始值为1,增量为1,点击确定。这一操作会在每行前生成1、2、3……,比手动敲快捷得多。

4.3 多光标:同时修改多个位置

新版Notepad++(8.1.6之后)加入了多光标编辑功能。按住Ctrl键,在文档不同位置单击,就能放置多个光标。接下来输入文字、删除字符、粘贴内容,所有光标位置会同步更新。

举个例子:一篇TXT里的章节标题散落在不同行,每一章开头都有一个“* * *”分隔符,你想统一把它们改成“—— 分割线 ——”。用查找功能找到第一个分隔符后,按住Ctrl再找其他分隔符,在每一个分隔符前放置光标,然后一次性输入替换内容。这在处理多个同类结构时非常高效。

4.4 别把对齐寄托在“敲空格”上

用Notepad++做对齐,很多新手会手动在需要对齐的文字之间敲空格。这样做在编辑器里看着是齐了,一旦字体切换或复制到其他软件里,立刻乱掉。正确的思路是使用等宽字体加制表符:在“设置”菜单的“语言格式设置”里,把全局字体改为“Consolas”“Courier New”这类等宽字体,然后把需要对齐的内容之间用Tab键隔开。等宽字体下,Tab形成的列是可控的。如果数据源是表格导出的,可以先把分隔符替换成Tab,再进行后续处理。

5. 宏脚本与批量替换:把排版从手工作坊变成流水线

前面讲的方法都是针对单个文档、单次操作的。如果你每天要处理几十份同样格式混乱的文本,逐份手动跑正则仍然不够。Notepad++有两个进阶武器:宏录制和PythonScript脚本。把这个流程搭好,排版才能真正实现“自动”。

5.1 录制宏:重复动作录下来,一键重放

宏适合处理那些步骤固定、每次操作完全相同的任务。比如我经常要把从网页复制的文本清洗成干净段落,完整流程是:删除行首空格、删除行尾空格、移除空行、中英混排加空格、半角逗号转全角。在Notepad++里打开“宏”菜单,点“开始录制”,把上面一系列操作依次做一遍,再点“停止录制”,保存成一个宏。之后处理同类型文档时,直接运行这个宏,整套动作自动重放一遍。

有一点要注意:宏录制的操作是基于界面状态的,里面记录的搜索关键词、替换文本都是固定的。如果每个文档的乱码前缀或章节标题格式不一样,宏就不太好使。宏适合“处理规则一致、只有内容对象不同”的场景。

5.2 PythonScript:几十行代码完成复杂清洗

如果宏不够灵活,可以装一个PythonScript插件。它通过Python脚本直接调用Notepad++的编辑接口,逻辑控制能力比宏强得多。

安装完成后,写一个最简单的脚本:

from Npp import editor # 中文字符与英文/数字之间插入空格 editor.rereplace(u'([一-龥])([A-Za-z0-9])', r'\1 \2') editor.rereplace(u'([A-Za-z0-9])([一-龥])', r'\1 \2') # 删除行首和行尾空白 editor.rereplace(u'^[ \t]+', '') editor.rereplace(u'[ \t]+$', '')

把这段代码保存为一个.py文件,在“插件”菜单的PythonScript里执行。它比手动操作的好处是,你可以把所有清洗规则写进同一个脚本,每次只运行一次,规则还随着项目沉淀下来。

如果怕正则范围出问题,可以先打印匹配数量,再决定是否替换:

from Npp import editor count = editor.search(u'[一-龥](?=[A-Za-z0-9])') print('找到', count, '处中英边界')

先跑一遍统计,确认数量合理,再执行真正的替换。这一步在批量处理前尤其重要。

5.3 “在文件中替换”:多个文件一次搞定

Notepad++的“在文件中查找”功能支持跨文件批量搜索和替换。在查找框中选“在文件中查找”标签页,输入正则、目标目录、文件通配符(比如*.txt),然后点“全部替换”。这个功能会遍历指定文件夹下所有匹配文件,一次性完成替换。

这里要特别提醒:这个操作没有任何预览确认步骤,一旦执行就直接改文件。我遇到过把文件夹里所有TXT的“第1章”批量替换成“第一章”,结果连正文里出现的“第1章节目录”也被改掉的意外。现在我的习惯是先在“替换”标签页里用同样的条件跑一遍单文件,再复制一份进测试目录,全量替换前确保规则没问题。

6. 打印前的最后一道工序:导出、页边距与字体控制

很多人搜“ps2021 打印 自动排版”,其实是希望最终输出的PDF或纸质文件版式看起来专业。Notepad++本身不是排版引擎,但它可以通过导出插件生成更易打印的HTML或RTF文件,让下游的Word、WPS或浏览器接手打印环节。这条路径比你直接按Ctrl+P更可控。

6.1 先把编辑痕迹藏起来

打印前的第一件事,是确认页面里没有编辑器元素。菜单栏“视图”里的“显示符号”,把所有关于空格、Tab、行尾符的勾选都取消。“设置”菜单里的“首选项”中,“打印”分类下有一个“打印行号”选项,默认会打印行号,如果你不想要,记得取消勾选。还有“页边距”设置,可以自定义打印页的左右边距,避免文字贴边。

6.2 设置适合阅读的字体和行距

纯文本导出打印,字体选择直接影响可读性。中英混排的内容,建议不要用纯中文衬线字体,因为英文部分会显得拥挤。比较稳妥的组合是中文用“微软雅黑”或“思源宋体”,英文用等宽字体。在“设置”菜单的“语言格式设置”里,可以单独调整全局字体、字号和字体风格,这个设置会同步影响打印输出。

6.3 用NppExport导出HTML或RTF

NppExport是Notepad++自带或可选的导出插件。在“插件”菜单里找到NppExport,选择“导出为HTML”或“导出为RTF”。导出HTML后,可以用浏览器打开,利用浏览器的打印预览调整CSS样式,再输出PDF。这种方法比直接打印Notepad++窗口更灵活,你可以把行距、页边距、配色都控制在自己手里。

如果想用RTF,则可以直接在Word或WPS里打开,利用“页面布局”里的页边距和段落设置做进一步处理。这里和PS打印自动排版是同一个思路:真正的精细排版放到专业软件里完成,Notepad++负责保证文本的干净和结构。

6.4 肉眼检查一遍再交付

很多排版问题不是出在规则不够多,而是出在“没看结果”。导出HTML后,我建议至少缩放检查三处:开头是否有BOM残留或多余空行、目录与正文字体是否一致、页面边距会不会把内容截断。纯文本内容的打印不比图文排版复杂,但“最后一眼”绝不能省,打印出来才发现问题就晚了。

7. 论文和PPT文本素材:在Notepad++里统一好再交给排版软件

论文排版有自己的一套规范,字号、行距、标题层级、参考文献格式,样样讲究。PPT排版则强调信息层级清晰、文案精炼。这两个场景有一个共同点:如果源文本里全是半角标点、混乱空格和从网页复制的脏字符,后面所有软件的自动样式都会用得很别扭。把Notepad++当成一个“文本预处理站”,能省掉后续很多返工。

7.1 清除从Word/WPS复制来的“格式污染”

从网页或Word里复制的文本,看起来差不多,实际上可能夹带了一堆不可见字符。最常见的两个是智能引号和不同断空格。智能引号在给程序或排版系统调用时经常出问题,不同断空格(Unicode字符\xA0)看起来是空格,但在正则匹配和Word里可能被当成特殊字符,导致查找替换不生效。

在Notepad++里,先打开“显示符号”检查这些角落。搜索目标填\xA0,替换成普通空格,就能把不同断空格全部洗掉。如果文件里还有全角空格(\x{3000}),也一并替换成半角空格或删除。这一步做完,再整理论文段落时,就不会出现“明明删了空格却怎么都删不掉”的怪事。

7.2 参考文献列表的批量清洗

整理论文参考文献时,从PDF复制过来的条目经常出现多余换行、编号错位、标点不一致。用Notepad++处理的核心是先把每一条文献压成一行。假设每条文献以“[1]”“[2]”开头,可以用正则把“]”后面的换行删除,但更简单的是先识别编号错位模式,再逐段合并。

文献条目里的常见问题还有中英文标点混用。比如“作者,A.B.。” 这种中英标点叠加,可以用正则把英文句点后紧跟中文句点的组合替换成中文句点:

查找目标:\.。替换为:

这些清洗规则看似零碎,但一次整理几十条参考文献时,效率差距会非常明显。

7.3 用Notepad++搭出论文内容骨架

论文的长文档结构,可以用Notepad++先搭出一个内容骨架。比如一章写一个“第1章 引言”,下面写“1.1 研究背景”“1.2 研究意义”,用正则^第[0-9一二三四五六七八九十]+章匹配一级标题,用^\d+\.\d+\s匹配二级小节。用书签标记后,把匹配到的标题复制出来,就得到一份论文目录。

后续在Word里排版时,只要把这些标题套用“标题1”“标题2”样式,就能生成自动目录。这一步的价值在于,你不在Word里手动调整几十个标题样式,而是在Notepad++里先把标题结构和层级全部统一好,再一次性导入。

7.4 PPT文案的精简预处理

PPT排版讲究的是文案精炼,不能把大段文字直接粘到幻灯片里。从长文档里提取PPT要点时,我习惯先用Notepad++做“去副词、去连接词”的删改。把原始段落复制进来,用正则把\s{2,}缩成单个空格,把连续的顿号替换成换行符,快速形成一条条要点。再在“编辑”菜单里用“排序”按拼音或笔画排序,调整顺序。

PPT需要的不是文本堆砌,而是层次。Notepad++不是PPT工具,但它在文案整理阶段给你提供了一个足够轻量、足够快的操作台。所有花哨的版式和配色留给PPT软件去处理,你只需要把要放进去的每一句话都控制在“干净、短促、有信息量”三条标准内。

8. 我的实测经验:先备份、再批量、最后肉眼检查

写了这么多,最后分享几条实践中的体会。第一个经验是“所有批量正则替换前,务必备份”。正则表达式一秒钟能跑完全文,但它不会思考哪些内容不该被替换。哪怕规则已经在小范围试过,我仍然会保留一份原始文件,代价只是几MB磁盘空间。

第二个经验是“能用一个正则解决,就不要用两个;能不用正则时,优先用菜单里的现成功能”。Notepad++的“移除空行”“删除行首行尾空白”这些菜单命令,本质上就是内置的批量操作。先用它们,再用正则处理更复杂的中英文边界,流程会清晰很多,出错了也容易排查。

第三个经验是“排版这事的最终交付物,永远是给人看的”。不管是在屏幕前阅读还是在纸上打印,最后的环节都要自己或另一个人检查一遍。我在处理完一份几十章的TXT后,会花五分钟从头到尾滚动翻阅,看章节标题有没有错位、中英文空格是否均匀、段落之间有没有突然冒出来的空行。这五分钟,比任何规则都管用。

Notepad++的上限,从来不是软件本身,而是你愿意为整理文本付出多少耐心。把这些流程建立起来之后,它就是你处理一切杂乱的纯文本内容的入口。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询