ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Notepad++正则表达式与列编辑:文本排版清洗实战指南

Notepad++正则表达式与列编辑:文本排版清洗实战指南 写这篇指南的起因是我帮朋友处理一本两百章的TXT小说。原稿里到处都是全角空格、半角标点、零星空行还有从不同网站复制过来后残留的乱码标记手动修完估计要一整个晚上。我在Notepad里用正则替换加列编辑半小时左右就全部理干净。后来我意识到很多人提到“排版”就想到Word、InDesign、PS但真正拖后腿的往往是源头文本太脏。Notepad虽然常被当成代码编辑器它在文本整理、格式清洗和中英混排这类“排版前半程”里反而是效率最高的工具之一。这篇内容不打算讲那些人尽皆知的“打开文件、查找替换”基础操作而是围绕几个高频排版场景把我实测过的正则、列编辑、宏脚本和导出流程一次讲透。适合需要批量处理TXT、做中英混排内容、整理论文素材以及每天跟乱七八糟文本打交道的人。1. 排版的第一步不是调字体而是把内容“洗干净”很多人在Word里花大量时间调字号行距却忽略了从网页、PDF、微信聊天记录里复制过来的文本本身是“脏”的。编码乱码、空行失控、行首行尾带着不可见空格这些问题不解决后面所有排版动作都会被带偏。我在Notepad里的习惯是先做一个“清洗三部曲”。1.1 编码混乱为什么打开就是乱码打开一个TXT或日志文件看到满屏锟斤拷或中第一反应不是关掉文件而是先看Notepad右下角显示的编码。Windows老系统常用的ANSIGB2312/GBK和Linux/macOS常见的UTF-8是两套完全不同的解码方式文件本身没坏是编辑器猜错了字符集。操作路径很简单先点菜单栏的“编码”如果当前按UTF-8解析乱码就换“使用ANSI编码”重新读取反过来也一样。确认内容正常后再执行“转为UTF-8编码无BOM”。这里特别提醒一下BOMByte Order Mark的问题UTF-8带BOM时文件开头会有几个不可见字节如果这份文本要放到网页或某些程序里可能会在第一个字符前多出一个空白行或特殊符号保存时选“无BOM”更稳妥。处理编码这件事没有统一公式因为同一个文件在不同系统里生成情况都不一样。我现在遇到乱码先花十秒钟试ANSI和UTF-8两种解析再考虑GB18030大多数文本都能救回来。1.2 空行和行尾先统一“路面”再开车空行是排版里最不起眼却最影响观感的东西。连续多个空行会让文档像破棉袄一样到处漏风。Notepad在“编辑”菜单里有一组“行操作”功能直接有“移除空行”和“移除空行包括空白字符”。后者连那些看起来是空行、其实里面藏着几个空格或Tab的行也一并清理这是我用得最多的一个命令。如果要把两段文本合并成一段比如从PDF复制的句子被强行拆成多行可以用“行操作”里的“合并行”或者直接在查找替换里把换行符换成空格。这里要注意Windows换行是\r\nUnix/Linux是\nNotepad在右下角状态栏会显示当前文件是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就是一份干净的章节列表。此时可以用“编辑”菜单里的“列编辑”功能给目录加编号。把光标放在目录第一行的行首按下AltShift向下方向键向下选中所有行然后在“编辑”菜单点“列编辑”选择“编号”插入设置起始数字为1步长为1。这一步能在目录每一行前自动插入递增序号不用手动敲。3.3 统一章节编号与层级缩进很多TXT文件里正文段落和章节标题之间的空格、缩进完全不一致。比如有的标题前有两个全角空格有的没有。为了统一可以用正则把章节标题行的前导空格删干净查找目标^[ ]{2,}(第[0-9一二三四五六七八九十百千零〇][章回节卷部篇])替换为$1如果是章节需要统一左缩进两个空格可以反过来操作。我个人的做法是一级章节标题不缩进二级小节缩进两个全角空格三级小节缩进四个半角空格。这样视觉层级清晰复制到阅读器或文档软件里也容易识别。4. 列编辑与多光标对齐场景下的“高速键”排版里经常出现这种需求几十行内容需要在每行相同位置插入一段文本或者在每一段前面加上序号。一行一行手动改不是不行但效率太低。Notepad的列编辑模式和Sublime Text的多光标功能能把这类重复操作压缩到几秒内完成。这也是很多人搜索“sublime 自动排版”时会连带关注Notepad的原因两者思路其实是相通的。4.1 Alt拖拽列选择的入门操作普通文本选择是按行连续选中按住Alt键拖动鼠标则可以选择一个矩形区域。比如一段名单张三 13800000000 李四 13911112222 王五 13733334444把光标放在第一行“张”字前面按住Alt往下拖到第三行“王”字前面你就同时选中了三行的前两个字符。此时直接按Delete能同时删除这三列字符直接输入文字则会在每一行的同一位置都插入相同内容。这个功能在整理代码注释、统一删除表格里的某一列时极其好用。如果鼠标拖拽不够精确也可以用键盘操作按住AltShift再配合上下左右方向键扩展矩形选区。配合“编辑”菜单里的“列编辑”对话框快捷键AltC可以给选中的矩形区域统一插入递增数字、当前日期或者任意固定文本。4.2 用列插入批量加序号和占位符给几十个段落标题加编号是典型的列插入场景。先把光标放在第一行标题的最前面按住AltShift向下方向键让选区覆盖所有需要编号的行。打开“列编辑”选择“编号”设置初始值为1增量为1点击确定。这一操作会在每行前生成1、2、3……比手动敲快捷得多。4.3 多光标同时修改多个位置新版Notepad8.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或浏览器接手打印环节。这条路径比你直接按CtrlP更可控。6.1 先把编辑痕迹藏起来打印前的第一件事是确认页面里没有编辑器元素。菜单栏“视图”里的“显示符号”把所有关于空格、Tab、行尾符的勾选都取消。“设置”菜单里的“首选项”中“打印”分类下有一个“打印行号”选项默认会打印行号如果你不想要记得取消勾选。还有“页边距”设置可以自定义打印页的左右边距避免文字贴边。6.2 设置适合阅读的字体和行距纯文本导出打印字体选择直接影响可读性。中英混排的内容建议不要用纯中文衬线字体因为英文部分会显得拥挤。比较稳妥的组合是中文用“微软雅黑”或“思源宋体”英文用等宽字体。在“设置”菜单的“语言格式设置”里可以单独调整全局字体、字号和字体风格这个设置会同步影响打印输出。6.3 用NppExport导出HTML或RTFNppExport是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的上限从来不是软件本身而是你愿意为整理文本付出多少耐心。把这些流程建立起来之后它就是你处理一切杂乱的纯文本内容的入口。
返回列表