ARTICLE DETAIL

资讯详情

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

Notepad++排版实战:从文本结构化到正则批量处理

Notepad++排版实战:从文本结构化到正则批量处理 1. 写在前面的排版思路Notepad这个编辑器很多人拿它当“高级记事本”用打开文件看一眼就关掉顶多改两行配置。但我实际用了十多年它在我手里一直是个生产力工具——不是写代码的主力那是IDE的事而是所有零散文本的集散中心日志清洗、配置文件批量调整、SQL格式化、JSON校验、批量替换脏数据、甚至给几千行txt配序号。这里面最容易被低估的就是它的排版能力。先说清楚我理解的“排版”这件事。很多人一提排版就想到Word里的字号、字体、行距、页边距但Notepad排版的核心根本不是“打印出来好不好看”而是让结构可见、让规律可循、让内容可批量处理。换句话说Notepad里的排版技巧大部分是在处理文本的结构化问题哪些行该对齐、哪些内容该缩进、哪些字符看不见但在捣乱、哪些重复模式能用一条规则全干掉。这篇文章不会讲怎么把Notepad改成IDE也不会塞一堆用不上的插件让软件变得臃肿。我只挑真正解决实际问题、几乎每天都会用到的排版思路和方法从基础视图配置讲到正则批量排版从内置功能讲到几个必装插件。适合谁看平时要处理日志、数据、配置文件的技术人员经常折腾文本格式的运营和编辑以及所有想让Notepad从“记事本”变成“工具”的人。顺便提一句最近网上“notepad zip 绿色版”这个词热度不低。我自己也很喜欢用zip免安装版本解压就能跑换机器时U盘一拷就能用配置全在userDefineLang和config文件里备份恢复都很省事。后面第五节会专门聊绿色版的配置迁移问题这个在排版环境搭建时特别重要。2. 整体设计先看视图模式再谈排版2.1 为什么排版前要先调视图排版的前提是你能看到文本的真实形态。很多人排版排不明白其实不是技巧不行而是压根没看见问题在哪。Notepad的视图设置里有几个开关常年被默认状态掩盖一旦打开很多莫名其妙的格式问题直接暴露出来。先说显示所有字符。菜单路径是“视图 - 显示符号 - 显示所有字符”打开后你会看到行尾的CRLF标记、空格变成的小点、制表符变成的向右箭头。这个功能看着不起眼但排查“为什么这段看起来对齐了实际没对齐”的时候它是唯一的真相来源。最典型的场景从网页、PDF或者Excel里复制文本进Notepad看着每行长度一样实际上一半是Tab一半是空格排序、对齐、正则匹配全都会出问题。打开显示符号一眼就能分辨。还有行号显示——这个大多数人默认开着但“换行显示”很多人没注意。长代码和长日志默认是横向滚动滚动起来特别容易看串行。我个人习惯是关掉自动换行保持每行就是一行宁可横向拉滚动条也不要让视觉换行干扰真实行结构。但如果你处理的是纯文本或者Markdown这类不在乎单行逻辑的内容自动换行反而舒服这就看场景取舍了。2.2 换行符、编码和Tab的底层逻辑排版里最容易出问题的三个“隐形变量”换行符、编码、缩进字符。这三样东西看不见摸不着但直接影响文本能否被正确解析尤其是在不同操作系统之间传来传去的文件。换行符有三种标准Windows的CRLF\r\n、Unix/Linux的LF\n、老Mac的CR\r。从Git拉下来的代码、Linux服务器上的配置文件、Windows里手工创建的txt这三者经常混在一起。混了之后最直观的麻烦是文件在Git里diff时整块显示改动、甚至某些脚本直接解析报错。Notepad的解决办法在“编辑 - 行尾转换”可以一键把整个文件统一成CRLF或者LF。我在处理服务器日志时默认先把它转成LF因为在Linux上跑awk、grep这些工具时LF兼容性最好。编码问题更折腾人。最典型的是UTF-8和GBK之间乱码。以前我接手一批老系统导出文件打开全是“锟斤拷”那其实就是UTF-8内容被按GBK解码再按UTF-8存了一遍双重损坏。Notepad的“编码”菜单里可以转码但要注意转码之前先看看状态栏右下角显示的当前编码确认了再操作不然转完更乱。更实用的习惯是新文件创建时就在“编码”里选好UTF-8存文件时也确认一遍别让记事本默认的ANSI把文件搞成GBK。Tab和空格的问题是我见过最多的排版混乱源头。Python代码里Tab和空格混用直接IndentationError这是最经典的一个。Notepad的“设置 - 首选项 - 制表符设置”里可以针对每种语言单独配置“替换为空格”我强烈建议所有语言勾上这个选项然后缩进宽度设成4。这样整个项目里所有文件都是空格缩进永无Tab之争。如果你是处理纯文本Tab也不是不能用但必须意识到Tab宽度在不同编辑器里显示不一样同一份文件在A编辑器里对得很齐换个编辑器全歪。要跨环境保证排版一致唯一办法就是Tab全部转成空格——选中要转换的内容菜单“编辑 - 空白操作 - 将制表符转换为空格”一键搞定。3. 核心排版功能解析与实操要点3.1 列编辑Notepad最被低估的排版利器我常说Notepad里最震撼的功能不是正则不是宏而是列编辑。这个功能一旦掌握处理结构化文本的效率直接翻倍。很多人用了几年都没发现它的存在还在一行一行地手改实在可惜。列编辑有三种进入方式按住Alt键用鼠标拖选出一个矩形区域ShiftAlt配合方向键选择或者菜单“编辑 - 列编辑”打开对话框。选中区块后你可以直接输入文字所有选中的行会同时插入同一段内容而且光标会自动对齐到每行的对应列位置。更关键的用法是在列编辑对话框里选择“数字插入”可以给每一行生成递增的数字序列这比手动拉序号强太多了——几千行文本生成编号瞬间完成还不容易出错。我举一个真实场景。有一次我要整理一份包含三百多行IP地址的文档每行格式是“IP 空格 备注”。原始数据里IP列参差不齐有的后面跟一个空格有的跟三个备注列完全对不齐。用列编辑的办法是先把所有行的IP部分选中因为IP是定长结构在第x列到第y列之间用列模式下输入空格或者直接在列编辑对话框里“在当前列插入”固定数量的空格把IP列统一扩充到最大长度。备注列自然就被推到了同一列整份文档立刻整齐了。这个操作如果用逐行改三百行要改到天荒地老列编辑十秒结束。还有“列模式批量修改前缀数字序号”的玩法。日志文件里每行开头有个时间戳但部分行缺时间戳你要把所有缺失行补上同一个标记。用Alt列选把缺标记的行的行首都框出来输入要补的内容一次补完。注意框选时每行都算一列哪怕有些行内容短到没有那么多字符列模式也会帮你把光标顶到对应位置空行也能插入。3.2 排序、去重与行操作把排版升级为数据清洗排版不是“看起来整齐”很多时候是“结构规范”。对于多行文本Notepad内置的行操作非常好用只是很多人不知道它们藏在哪。菜单路径在“编辑 - 行操作”里面有排序、移除空行、合并行、反转行序、把行加引号加逗号等一堆功能。这里面每一个都是文本排版的实际刚需。排序功能有两种按字母或数字升序降序。注意如果你直接选中好几列数据然后点排序Notepad会按整行内容排序而不是按某一列。要按指定列排序得先切到列编辑模式选中那一列或者配合插件“TextFX”里的Sort Lines。这个细节很多人第一次用会踩坑我在这里先说清楚。另外排序前想清楚升序还是降序以及是否要忽略大小写——设置里有选项默认是大小写敏感的处理纯英文列表时注意勾选“忽略大小写”否则排序结果会怪怪的。去重功能就藏得更深了菜单“编辑 - 行操作 - 移除重复行”一个选项是移除连续重复的行一个是在整个文件范围去重并保留一条。这两种都得会用连续重复适用于日志里同一错误反复刷的场景全局去重适用于合并多个来源的名单后有大量重复ID的场景。去重之前一定要先排序不然全局去重一个文件几千行会比排序后慢很多。我实测过未排序的几千行去重要卡几秒排序后基本秒完成——先排序再去重永远是好兄弟。还有行操作里的“将行首/行尾添加文本”、“添加引号和逗号”这两个是批量处理SQL和JSON数据时的福音。比如你有一堆ID要变成SQL的IN列表直接选中所有ID所在行行操作里加前缀“”后缀“,”几百个参数瞬间排好不会漏也不会有格式错误。3.3 缩进控制让层级关系一眼看懂缩进控制是排版里最直观但也最容易做得脏乱的地方。Notepad的缩进操作快捷键其实非常顺手选中多行后按Tab整体缩进、按ShiftTab整体取消缩进。这个操作比空格手动缩进快太多了而且能保证缩进粒度一致。实际处理HTML或者JSON这类结构化文本时缩进和折叠是配合使用的。Notepad左上角的折叠箭头让你能把整个函数块、标签块一键收起来检查层级结构。如果你发现某层A的闭合标签和开头标签不对应把它缩进去展开一下立刻就能看出来——因为缩进层级和折叠层级是同步的视觉上一眼定位到错位点。那自动缩进怎么打开“设置 - 首选项 - 自动缩进”里面可以设置在打开新行时自动沿用上一行缩进级别。加上我前面说的Tab转空格配置整个文件的缩进就能保持一致。如果你有一段文本是乱缩进的比如从PDF问里复制过来的代码可以试试“编辑 - 空白操作 - 移除所有行首尾空白”先把首尾空格清掉再用整体缩进功能统一重建层级。3.4 正则表达式排版里的“终极批量操作”我接触过很多用Notepad的人用的都是最基础功能查找替换固定字符串。一旦文本里有一丁点“规律性变化”他们就开始手工操作——一个个改、一行行删、一段段挪。其实正则表达式的批量处理能力才是排版这个环节真正拉开差距的地方。举个最简单的例子把有规律的数据文本中每行的第几个字段取出来、重排、加前缀后缀或者把日志中的时间戳和日志级别提取出来重新拼成新格式全部可以一次替换完成。Notepad的正则替换在“查找替换”对话框里勾选“正则表达式”模式才算是打开了完整版功能。我常用几个模式分享一下^匹配行首$匹配行尾\s匹配空白字符\d匹配连续数字(.*?)做非贪婪匹配配合\1、\2在替换串里引用捕获组。很多人学正则卡在“贪婪”和“非贪婪”的区别上——贪婪是能多吃就多吃非贪婪是最少匹配即停。这个差异在处理HTML标签时天天都遇到比如要匹配a标签里的链接地址用href(.*?)非贪婪匹配才能保证只取到第一个引号为止。举一个最近实际处理的例子有一份日志文件每行格式是“2025-03-01 10:23:45 INFO 用户登录成功 user123”我要把这些内容重排成“user123,10:23:45,INFO”。替换规则是^(.*) (.*) (\w) .*? (\w)$替换为\4,\2,\3。这段正则里面的捕获组分别是日期、时间、日志级别、用户ID替换一次几百行瞬间全部变成新格式。这就是正则用于排版的核心价值——排的不是“格式”而是“结构”。但正则替换有个必须注意的坑替换之前先确认是否勾选了“循环匹配”即全部替换。如果没勾默认只替换第一个匹配项你可能以为全换完了结果只动了一行。还有一种坑就是正则在“匹配换行”和“不匹配换行”之间的差异默认.不匹配换行符如果需要跨行匹配先把“.”换成[\s\S]并且要勾选“正则表达式”之外的特殊选项不然怎么替换都不生效。4. 插件生态排版能力延伸到全新维度4.1 文本比较文件之间排版差异一眼即见排版不只是“改格式”很多时候是“找不同”。两份配置文件、两份日志、两个版本的代码肉眼比对是又累又容易漏的。Notepad自带的“Compare”插件就是干这个的下载后放在plugins目录重启软件后菜单“插件 - Compare”就能用。这个插件使用起来极其粗暴直接打开两个文件点“Compare”它会自动高亮所有不同行左边绿色表示新增行、右边红色表示删除行、黄色表示修改行。对于配置文件的排版调整来说这个功能能帮你快速确认“我改的东西是不是只有我想改的部分”而且比对结果一目了然。有一次我调整了一个上线脚本的缩进怕改动影响了逻辑就用这个插件跟旧版本比对确认差异全在缩进空白上逻辑没动这才放心上生产。比较完了如果确定要用某个版本就可以用插件菜单里的“Copy to Left / Copy to Right”把差异块逐块覆盖过去避免整文件复制后把非差异区域的修改也覆盖了。4.2 XML Tools、JSON Viewer和Markdown预览三种格式化刚需大量日常排版工作是针对三种特定格式XML、JSON、Markdown。Notepad有对应的插件把它们从原始杂乱文本变成格式化结构一键完成排版和校验双重任务。XML插件“XML Tools”里有个“Pretty print (XML only - with line breaks)”功能能把压缩在一行的XML按照层级拆成多行并缩进。这个太常用了——我从接口返回里拿到的XML全是单行的一坨不格式化根本没法读。还有验证XML格式是否正确的功能Check XML syntax如果文件有标签不闭合插件直接报错并说明错误位置。JSON插件“JSON Viewer”更出名它能在Notepad侧边栏把JSON渲染成树状结构同时格式化代码。截图发出去就是给同事看的银灰色结构树排查嵌套层级基本都靠它。但我要提醒一句格式化之前要先确认JSON本身合法如果里面有尾逗号、单引号、注释之类的违规范写法Notepad的格式化库可能直接显示解析失败倒是能把问题暴露出来。Markdown如果你用Notepad写Markdown确实有不少人这么干那“Markdown Viewer”插件值得装上快捷键打开预览窗口边写边看渲染效果。Markdown排版的格式就是井号标题、加粗斜体、代码块、列表但纯文本状态下的Markdown本来就没什么排版可言真正需要的是渲染后的预览。这个插件能让你在Notepad里完成从编写到预览的全流程不用再切到第三方编辑器。这对专注写文档的人很友好。4.3 文本整理全家桶Python Script和TextFX比上面的插件更底层的排版能力来自自动化脚本——Notepad的“Python Script”插件。这东西允许你用Python脚本操作文档内容做复杂的批量排版。举个我自己的例子有一份多行文本我需要在所有超过80字符的行末尾加一行“过长警告”如果用正则做匹配长度超过80字符的行很难写干净正则可读性差但用Python Script就简单了——读取全部行遍历判断长度修改行内容写回去一个循环搞定。TextFX是另一个老字辈插件很多老玩家推荐新版Notepad不再内置但单独下载还是能用的。里面的“Sort Lines Case Sensitive”、加HTML实体、大小写转换、行首行尾加文本等操作全部收纳在同一个菜单下操作路径短效率高。不过新版系统上部分功能会报错我建议只用它做排序和行操作更复杂的排版还是交给Python Script。5. 实操现场一步步完成一次复杂排版任务5.1 任务描述把乱糟糟的数据清单变成结构化表格光讲功能不讲场景总觉得少了一大半。这里我带你走一遍完整任务从开文件到最终交付每一步都说明为什么这么做。任务目标把一份从Excel导出的CSV数据文件含重复行、混合空格、乱缩进变成结构清晰、带编号、按第二列排序的规范文本。原始文件大概是这个样子我脱敏简化了张三,北京,13811112222 李四,上海,13912345678 王五 北京 13711112222 张三,北京,13811112222 赵六,广州,13612345678注意这里第二行和第三行的分隔符不一致有逗号有空格而且还有一条重复数据。5.2 实操流程全拆解第一步打开文件后先“视图 - 显示符号 - 显示所有符号”确保看清每行用的是Tab、空格还是逗号。这里一眼就能看到第三行是空格分隔第一行是逗号分隔。统一分隔符前我们要想清楚是用逗号还是用制表符做最终分隔CSV的原始约定是逗号所以以逗号为准。选中第三行中的空格逐个替换为逗号——但别一个个手选用“查找替换”把“空格”全部替换成“,”。注意此时不要勾选正则模式因为这里就是纯空格替换。替换前先确认文本里不会有其他该保留的空格比如姓名里的空格否则会误伤。第二步去重。先全选菜单“编辑 - 行操作 - 移除重复行保留一条”此时张三那份重复行被干掉一行。这里我用的全局去重而非仅去除连续重复行因为重复行没挨在一起第一行和第四行被隔开了。对比一下就知道用“移除连续重复行”这个功能是干不掉这种非连续重复的。第三步排序。选中所有数据行菜单“编辑 - 行操作 - 排序按字母/数字”。我这里要求按第二列城市排序直接整行排序是不行的——整行排序会先按第一列姓名排城市只会作为第二关键字。处理办法是先对第二列做列选区Alt鼠标拖动选中第二列然后“编辑 - 行操作 - 排序”会发现Notepad会以选中列数据为排序键把整行顺序调整。这一步实操过就知道选中列排序影响的是整行不会把列拆乱。第四步加编号。用“编辑 - 列编辑”对话框选择“数字插入”起始值1步长1然后选中第一列位置插入编号列编号后加分隔符。这里可以直接在列编辑里选“在前缀”或设置文本框实际列编辑对话框支持在每列插入内容。我先在第一列插入编号数字再用查找替换把“数字逗号”补齐成“编号制表符原内容”的结构生成一份新的带序号的清晰列表。第五步标准化分隔符。最终交付我决定用制表符分隔方便复制进Excel仍能分列。全选内容“查找替换”中将第x个逗号替换成制表符。注意这里不能简单把逗号全替换成Tab否则列与列之间全没了分隔Excel分列反而麻烦。所以用正则查找^(\d),(.*),(.*),(.*)$替换为\1\t\2\t\3\t\4——只用一条正则完成编号列和原有三列之间的Tab化。第六步验证。再次打开“显示所有符号”检查所有换行符一致把文件统一转成LF、编号连续、排序正确、没有空格隔断。最后用“Compare”插件和原始CSV文件对比一次确保数据没丢没串。完成。5.3 自动化的更高一层宏录制批量排版的实践上面这六步如果每个月都要操作一遍那就该录宏了。Notepad的宏功能非常简单菜单“宏 - 开始录制”然后按顺序完成上述操作结束后“宏 - 停止录制”保存宏并绑定快捷键。下次处理同类文件直接按快捷键哪怕文件有几百行几千行分分钟解决。我实际工作中经常录这类宏打开文件 → 全选 → 转成LF → 去重 → 按第二列排序 → 重新编号 → 转Tab。整套流程一套组合拳真正实现了“数据清洗自动化”。如果你还想更自动配合Python Script插件写一段脚本循环处理目录下的多个文件那效率就更高了。不过宏录制也有一些小坑录制时如果使用了鼠标点击菜单项宏可能记录不上部分菜单动作所以录制期间尽量只用键盘快捷键。另外宏录制的顺序是死的如果你处理文件的格式变化很大宏会比手工更适合固定格式的批处理复杂的多变格式还是得手动判断。6. 常见问题与避坑清单实录6.1 为什么打开文件全是“锟斤拷”或者个别字变问号这个我在前面提过编码问题。现象是文件内容实际是GBK编码但Notepad以UTF-8打开中文就会变乱码。打开前先看右下角编码提示如果不对不要直接“另存为”而是先在“编码”菜单里转换编码——把“使用UTF-8编码”改成“使用ANSI编码”文件内容可能直接恢复再另存为UTF-8。注意这两个步骤顺序不能反先转码显示正确再保存成目标编码。还有一种情况是“个别字变问号”多半是文件本身含有非法编码字节或者文件是从一页网页上复制的里面带了隐藏字符。你先“显示所有符号”看看那些问号边的字符是不是不可见控制符是的话用查找替换正则[\x00-\x08\x0B\x0C\x0E-\x1F]批量删掉。6.2 明明显示对齐了复制出去就乱这是在处理缩进时最常见的坑。你用Notepad看着对齐的内容复制到Word、Excel、网页文本框里全部错位原因就是Tab宽度在不同环境里不一致。解决办法是排版定型前把Tab全转成空格。前面说过的“编辑 - 空白操作 - 将制表符转换为空格”就是干这个的。全部转换后任何环境里显示的都是固定数量空格不会再变。这个步骤我在交付任何文档前都会做一遍尤其是要发给非技术同事的文件——Word里Tab默认宽度跟Notepad完全不同后面的人根本不理解你排的什么版。6.3 正则替换时“该生效的没生效”正则替换没生效先排查三件事是不是没勾选“正则表达式”模式这是90%的问题替换是不是没点“全部替换”只替换了第一个是不是模式里有特殊字符被转义弄错了。第四种情况也很常见在中文字符环境下正则里的空白匹配比较微妙有时候明明有空格却匹配不上可以把“匹配空白”的写法从\s改为 字面空格再试。调试复杂正则时我的习惯是先在一两行样本上测试确认替换结果完全符合预期后再应用到全部文件。永远不要先在完整文件上直接跑一个没验证过的复杂正则一旦替换错了撤销可能来不及特别是处理大文件时好几次撤销到文件历史之前也未必能完全恢复。6.4 绿色版配置丢失或软件打开异常“notepad zip 绿色版”用起来很方便但有两个注意点一是配置保存位置绿色版解压后首次运行就会在软件目录下生成config.xml、session.xml等文件你的插件、宏、语言配置全存在那里。换机器时把整个目录拷走而不是只拷Notepad.exe配置才不会丢。二是某些插件对路径有要求默认写死在安装版目录下时绿色版可能加载不了插件遇到这种情况手动把插件文件复制到绿色版的plugins目录就行。如果是“打开文件后找不到之前配置的宏”这类问题多半是宏存在%APPDATA%\Notepad\shortcuts.xml里而绿色版读的是本地目录这里直接搜索shortcuts.xml就能定位。另外绿色版软件第一次运行会提示某些设置无法写注册表不用管它后续会把必要配置写进软件目录的xml文件里核心排版功能不受影响。6.5 常用功能找不到菜单入口一个新现象是“插件 - Compare”等菜单不显示最直接的原因就是插件没被正确加载。绿色版很容易出现这种状况手动把插件dll放进plugins目录后重启软件还不行的话检查一下插件版本是否和Notepad位数匹配32位插件不能用在64位Notepad上。另外新版Notepad把很多内置功能的位置挪了比如“排序”这类功能在不同版本里的菜单路径就不太一样找不到请习惯用“设置 - 快捷键映射”里搜索“排序”“比较”之类关键词直接重设快捷键比到处翻菜单快得多。7. 适配不同使用场景的排版方案组合到这里大部分核心技巧都过了一遍但不同场景的组合方案不一样我挑三个高频场景做最终梳理。纯文本与文档编写最适合的组合是“显示所有字符 自动换行 制表符转空格 Markdown预览插件”。排版重点是结构清晰Markdown的实时预览配合缩进检查就够了。如果要整理笔记再用“行操作—排序去重”整理出干净的清单。代码与配置文件调试必须开“显示所有符号 行号 Tab转空格 括号匹配高亮 Compare插件”。配置文件格式类文本建议下载插件“XML Tools”和“JSON Viewer”改完立刻格式化校验节严重的大坑。缩进统一用4空格代码层级永远不会因为环境不同而崩掉。日志与数据清洗最推荐“列编辑 正则替换 行操作排序去重 宏录制”四件套。这三类场景里效率提升最大。日志处理时先把行尾统一转LF再去重、排序、提取关键字段整个流程用宏录下来以后一条命令跑完流水线。我在实际使用中最大的感触是Notepad的排版技巧不是零散功能的堆砌它是一个“观察-分析-操作-验证”的循环过程。先看到文本的真相显示符号、编码再想清楚你要什么样的结构列模式、正则、宏操作后用Compare和显示符号二次检查。这个流程跑熟练了处理任何文本都比别人快好几倍而且出错的概率低得多。文章写到这里上面这些方法我都在日常工作中反复验证过。你也别一次全装完插件先从最需要的两三个功能用起把列编辑和正则练熟就已经比大多数人强了。这工具的排版上限很高值得在上面花点时间。
返回列表