1. 正则表达式入门:Notepad++的文本处理利器
第一次接触正则表达式是在处理几百条混乱的日志数据时,当时手动复制粘贴到怀疑人生。直到同事推荐了Notepad++的正则查找替换功能,我才发现原来文本处理可以如此高效。Notepad++作为一款轻量级文本编辑器,其正则表达式引擎足以应对日常90%的文本处理需求。
正则表达式就像文本处理的"万能钥匙",通过特定语法规则描述字符串模式。比如要匹配所有电子邮箱,用\w+@\w+\.\w+就能搞定。在Notepad++中使用正则需要先开启"正则表达式模式",快捷键Ctrl+F调出查找窗口,勾选左下角的"正则表达式"选项即可。
这里分享一个新手容易忽略的细节:Notepad++默认使用"普通"查找模式,如果不勾选正则选项,输入的正则语法会被当作普通文本处理。我曾经花了半小时调试一个"无效"的正则表达式,最后发现竟是忘记切换模式,这个教训至今记忆犹新。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从JSON日志中提取会员ID实战
最近处理过一个典型场景:需要从2GB的JSON格式日志中提取10万个会员ID。原始数据格式如下:
json复制{"event":"login","memberId":"123456","time":"2023-01-01"}
{"event":"view","userId":"abc123","memberId":"789012"}
2.1 基础提取:捕获组的妙用
在Notepad++中按Ctrl+H打开替换窗口,输入以下正则表达式:
code复制"memberId":"([0-9]+)"
替换为:
code复制$1\n
这个表达式中的圆括号创建了一个捕获组,[0-9]+匹配连续数字,替换时的$1就代表第一个捕获组内容。我习惯在替换结果加\n换行,这样每个ID会单独成行。执行"全部替换"后,原始日志就变成了整洁的ID列表:
code复制123456
789012
2.2 高级技巧:处理不规则数据
实际数据往往没那么规整,可能会遇到:
json复制{"memberId": "456789" } // 带空格
{"info":{"memberId":"112233"}} // 嵌套结构
这时需要更健壮的正则:
code复制(?:[{,]\s*)"memberId"\s*:\s*"([0-9]+)"
这个模式考虑了:
(?:[{,]\s*)匹配花括号或逗号开头\s*处理可能的空格- 非捕获组
(?:)避免干扰$1编号
3. 文本格式化三连击
3.1 添加行尾分隔符
经常需要将文本列表转为CSV格式。假设有数据:
code复制苹果
香蕉
橙子
在替换窗口使用:
code复制^(.*)$
替换为:
code复制$1,
记得勾选"正则表达式"和"匹配换行符"。这里的^和$分别匹配行首行尾,(.*)捕获整行内容。效果:
code复制苹果,
香蕉,
橙子,
3.2 按特定符号换行
处理中文文本时,可能需要按顿号分列。以省级行政区为例:
code复制北京、上海、重庆、天津
使用正则:
code复制、
替换为:
code复制\n
瞬间转换为:
code复制北京
上海
重庆
天津
3.3 清除HTML标签
处理网页抓取数据时常见需要清除标签。对于简单标签(无嵌套):
code复制<strong>重要</strong>通知<em>!</em>
使用正则:
code复制<[^>]+>
替换为空即可。其中的[^>]表示"除了>之外的任意字符"。但要注意这个正则无法处理嵌套标签,对于复杂HTML建议分步处理。
4. 效率提升技巧合集
4.1 宏录制:重复操作的救星
当需要交替执行多个正则替换时,可以录制宏。比如先删除空行再添加分隔符:
- 点击"宏"→"开始录制"
- 执行第一个替换操作
- 执行第二个替换操作
- 停止录制并保存
下次直接运行宏就能一键完成整套操作。我曾经用这个功能批量处理了300个数据文件,节省了至少3小时工作量。
4.2 书签功能:精准定位关键行
在大型文件中,可以先通过正则查找标记关键行:
code复制^(.*重要.*)$
查找后点击"搜索"→"书签行",所有匹配行会被标记。之后可以通过"搜索"→"书签"→"复制书签行"快速提取这些行。
4.3 插件扩展:Markdown表格转换
安装TextFX插件后(Notepad++默认包含),可以快速格式化表格数据。选中文本后使用"TextFX"→"TextFX Convert"→"Smart Table to Space"能将混乱的表格数据对齐。这个功能在处理日志报表时特别有用。
5. 避坑指南与性能优化
5.1 常见正则错误排查
- 贪婪匹配陷阱:正则默认是贪婪匹配。比如
<.*>会匹配从第一个<到最后一个>之间的所有内容。需要改为<.*?>启用非贪婪模式 - 特殊字符转义:匹配
[、(等特殊字符需要加反斜杠转义,如\[ - 换行符处理:Notepad++中
\r\n表示Windows换行,单独用\n可能不匹配
5.2 大文件处理优化
处理GB级文件时:
- 关闭文件自动备份:设置→首选项→备份→取消"自动完成"
- 使用"仅查找"而非"替换"先测试正则
- 分批次处理:通过行书签每次处理10万行
- 增加内存缓冲区:设置→首选项→性能
有次处理800MB日志文件时,Notepad++内存占用达到2GB。后来发现是因为开启了"语法高亮",关闭后性能提升明显。
6. 复杂案例:多步数据清洗实战
假设要从混合日志中提取订单信息并格式化:
code复制[2023-01-01] 用户A (ID:123) 下单 订单号:ORD-456 金额:¥100
[2023-01-02] 用户B (ID:789) 退单 订单号:ORD-123 金额:¥50
6.1 第一步:提取关键字段
使用正则:
code复制ID:(\d+).*?订单号:(\w+-\d+).*?金额:¥(\d+)
替换为:
code复制用户ID:$1,订单号:$2,金额:$3元
6.2 第二步:转换为CSV
再执行:
code复制^(.*)$
替换为:
code复制"$1"
最终得到标准CSV:
code复制"用户ID:123,订单号:ORD-456,金额:100元"
"用户ID:789,订单号:ORD-123,金额:50元"
这种分步处理法比编写复杂正则更易维护。我习惯把每个步骤的正则保存为不同的搜索替换配置,方便重复使用。
