Notepad++ 正则表达式完全手册:文本处理的终极武器(2026实战版)

为什么 Notepad++ 用户必须学正则?

如果你还在用"手动删除空行""逐行复制粘贴""一个个改格式"来处理文本,那么正则表达式将彻底改变你的工作方式。

Notepad++ 内置的正则引擎基于 Scintilla,支持 Perl 兼容正则(PCRE)的大部分语法。掌握之后,以下任务都可以在几秒钟内完成:

  • 从 10 万行日志中提取所有 IP 地址和错误码
  • 将 Excel 导出的混乱数据清洗为标准 CSV
  • 批量重命名变量、统一代码风格
  • 提取网页源码中的链接、邮箱、手机号
  • 将 Markdown 表格转为 HTML 或 JSON

下面从最基础的语法开始,逐步进阶到实战场景。


一、Notepad++ 正则基础语法速查

1. 打开正则模式

在 Notepad++ 中按 Ctrl + H 打开替换窗口,底部**"查找模式"**选择 "正则表达式"。

提示 :勾选 ". 匹配新行" 可以让 . 匹配换行符,用于跨行匹配。

2. 常用元字符

元字符 含义 示例
. 匹配任意单个字符(除换行符) a.c 匹配 "abc"、"a1c"
^ 匹配行首 ^Hello 匹配以 Hello 开头的行
$ 匹配行尾 end$ 匹配以 end 结尾的行
* 前一项出现 0 次或多次 ab*c 匹配 "ac"、"abc"、"abbc"
+ 前一项出现 1 次或多次 ab+c 匹配 "abc"、"abbc",不匹配 "ac"
? 前一项出现 0 次或 1 次 colou?r 匹配 "color" 和 "colour"
\d 匹配数字(0-9) \d+ 匹配一个或多个数字
\w 匹配单词字符(字母、数字、下划线) \w+ 匹配一个单词
\s 匹配空白字符(空格、制表符等) \s+ 匹配一个或多个空白
[abc] 匹配方括号中的任意一个字符 [aeiou] 匹配任意元音字母
[^abc] 匹配不在方括号中的字符 [^0-9] 匹配非数字
() 分组 / 捕获 (ab)+ 匹配 "ab"、"abab"

3. 贪婪与非贪婪

  • .* ------ 贪婪匹配:尽可能多地匹配字符
  • .*? ------ 非贪婪匹配:尽可能少地匹配字符

示例 :文本为 <div>hello</div><div>world</div>

  • <div>.*</div> 匹配整个字符串(贪婪)
  • <div>.*?</div> 分别匹配 <div>hello</div> 和 <div>world</div>(非贪婪)

实战建议 :大多数场景使用非贪婪 .*? 更安全,避免匹配过多内容。

4. 捕获组与替换引用

  • 查找中用 () 捕获内容
  • 替换中用 $1、$2 引用第 1、第 2 个捕获组

示例 :将 2026-11-02 转为 02/11/2026

  • 查找:(\d{4})-(\d{2})-(\d{2})
  • 替换:$3/$2/$1

二、数据清洗实战

场景1:删除所有空行

查找:

复制代码
`^\s* $ \r?\n`

替换:(留空)

\s* 匹配零个或多个空白字符,\r?\n 匹配换行符(兼容 Windows 和 Unix 格式)。

场景2:删除行首/行尾空格

删除行首空格:

  • 查找:^\s+
  • 替换:(留空)

删除行尾空格:

  • 查找:\s+$
  • 替换:(留空)

场景3:CSV 列顺序调整

原始数据(姓名,年龄,城市):

复制代码
张三,25,上海
李四,30,北京

调整为(城市,姓名,年龄):

  • 查找:([^,]+),([^,]+),([^,\r\n]+)
  • 替换:$3,$1,$2

结果:

复制代码
上海,张三,25
北京,李四,30

场景4:提取邮箱地址

从混合文本中提取所有邮箱:

  • 查找:[\w.+-]+@[\w-]+\.[\w.-]+
  • 替换:$0\n

$0 代表整个匹配内容,\n 确保每个邮箱单独一行。

场景5:手机号脱敏

将 13812345678 替换为 138****5678:

  • 查找:(\d{3})\d{4}(\d{4})
  • 替换:$1****$2

三、日志分析实战

场景1:提取 IP 地址

从服务器日志中提取所有 IP:

  • 查找:\b(?:\d{1,3}\.){3}\d{1,3}\b
  • 替换:$0\n

\b 是单词边界,确保不会匹配到类似 1234.5.6.789 的无效内容。

场景2:提取时间戳

从日志行 2026-11-02 14:30:25 [ERROR] ... 中提取时间:

  • 查找:(\d{4}-\d{2}-\d{2})\s+(\d{2}:\d{2}:\d{2})
  • 替换:$1 $2\n

场景3:筛选包含关键词的行

保留包含 "ERROR" 或 "Exception" 的行,删除其他行:

  1. 先标记目标行:
    • 查找:^(.*(ERROR|Exception).*)$
    • 替换:###KEEP###$1
  2. 删除未标记的行:
    • 查找:^(?!###KEEP###).*\r?\n
    • 替换:(留空)
  3. 去除标记:
    • 查找:###KEEP###
    • 替换:(留空)

场景4:统计错误码出现次数

将日志中的错误码提取出来,每行一个,方便用 Notepad++ 的搜索 → 统计功能计数:

  • 查找:ERROR_CODE[:=]\s*(\d+)
  • 替换:$1\n

四、代码批量修改实战

场景1:批量注释代码行

在选中区域每行前添加 // :

  • 查找:^(.+)$
  • 替换:// $1

注意:先在 Notepad++ 中选中要注释的行,然后在搜索 → 在以下项中查找 → 当前选中内容中执行替换,避免影响其他代码。

场景2:Python 变量名批量重命名

将 user_name 改为 userName(下划线转驼峰):

  • 查找:_(\w)
  • 替换:\U$1

\U 将下一个字符转为大写。多次执行可处理多个下划线。

场景3:JSON 键名加引号

将未加引号的 JSON 键名加上双引号:

  • 查找:(\w+)\s*:
  • 替换:"$1":

场景4:HTML 标签属性提取

从 <img src="photo.jpg" alt="风景" /> 中提取 src 值:

  • 查找:<img[^>]*src="([^"]+)"
  • 替换:$1\n

场景5:SQL 语句格式化

将 SELECT id, name, age FROM users WHERE age > 18 转为多行:

  • 查找:(SELECT|FROM|WHERE|ORDER BY|GROUP BY)
  • 替换:\n$1

五、高级技巧

1. 前瞻与后顾(Lookahead / Lookbehind)

正向前瞻 (?=...):匹配后面跟着某内容的文本,但不包含该内容。

示例:匹配后面跟着 "元" 的数字:

  • 查找:\d+(?=元)
  • 匹配 "100元" 中的 "100",但不包含 "元"

负向前瞻 (?!...):匹配后面不跟着某内容的文本。

示例:匹配不以 "test" 开头的行:

  • 查找:^(?!test).*$

2. 条件替换

Notepad++ 不支持真正的条件替换,但可以通过多次替换实现类似效果。

例如,将 true 替换为 1、false 替换为 0:

  1. 第一次:查找 true,替换 1
  2. 第二次:查找 false,替换 0

3. 跨行匹配

勾选 ". 匹配新行" 后,[\s\S]*? 可以匹配任意字符(包括换行符)。

示例:提取两个标记之间的多行内容:

  • 查找:<!-- START -->([\s\S]*?)<!-- END -->
  • 替换:$1

4. 反向引用去重

删除连续重复的行:

  • 查找:^(.+)\r?\n\1$
  • 替换:$1

注意:此方法仅删除相邻的重复行。删除所有重复行需借助插件或多次操作。


六、正则调试技巧

1. 小步测试

不要一次性写复杂的正则。先在 Notepad++ 中用查找 (Ctrl + F)测试匹配是否正确,确认无误后再执行替换。

2. 使用"在以下项中查找"

对于危险操作,先在当前选中内容 或当前文档中测试,避免误操作整个项目。

3. 备份原文件

执行批量替换前,务必 Ctrl + S 保存当前状态,或复制一份备份文件。Notepad++ 的撤销 (Ctrl + Z)可以回退替换操作,但备份更保险。

4. 利用搜索标记

在查找窗口中点击**"在以下项中查找 → 标记"**,可以高亮所有匹配项,直观检查正则是否正确。


七、常用正则模板速查表

场景 正则表达式
邮箱 [\w.+-]+@[\w-]+\.[\w.-]+
手机号(中国大陆) 1[3-9]\d{9}
IP 地址 \b(?:\d{1,3}\.){3}\d{1,3}\b
URL https?://[\w./?&=#-]+
日期(YYYY-MM-DD) \d{4}-\d{2}-\d{2}
时间(HH:MM:SS) \d{2}:\d{2}:\d{2}
中文 [\u4e00-\u9fa5]+
空白行 ^\s*$
HTML 标签 <[^>]+>
Markdown 链接 \[([^\]]+)\]\(([^)]+)\)

八、常见问题解答

Q1:Notepad++ 的正则和 Python/JavaScript 的一样吗?

大部分语法通用,但 Notepad++ 基于 Scintilla 的 PCRE 引擎,不支持部分高级特性(如命名捕获组 (?P<name>...))。日常使用完全够用。

Q2:为什么我的正则匹配不到内容?

  • 检查是否勾选了**"正则表达式"**模式
  • 检查是否勾选了**"匹配大小写"**(默认不区分)
  • 检查是否勾选了**". 匹配新行"**(跨行匹配时需要)
  • 尝试用标记功能高亮匹配项,排查问题

Q3:替换后内容全乱了怎么办?

立即按 Ctrl + Z 撤销。Notepad++ 支持多步撤销,可以逐步回退。

Q4:如何学习更复杂的正则?

推荐以下资源:

  • regex101.com ------ 在线正则测试工具,支持 PCRE 语法,实时解释每个字符的含义
  • Notepad++ 官方文档 ------ 查看支持的正则语法详情
  • 从本文的模板出发,逐步修改和组合,在实践中掌握

结语

正则表达式不是程序员的专属技能。无论是整理数据、分析日志,还是批量修改代码,正则都能让你从重复劳动中解放出来。

建议从本文的常用正则模板速查表开始,遇到类似场景直接套用。用多了,你会发现正则并没有想象中那么难------它只是一套更精确的"查找规则"而已。

相关推荐
梯度下降者21 小时前
Python使用统计建模解决业务预测问题的常见操作步骤【教程】
python·可解释性·数据清洗·模型选择·业务预测
Frag0ut1 天前
Notepad++ 零基础入门:从记事本到代码编辑器的平滑过渡(2026最新版)
python·编辑器·html·json·notepad++·markdown·记事本
Patrick在香港3 天前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
echome8883 天前
Python 正则表达式:5 个日常够用的模式
python·正则表达式
yivifu4 天前
能够使用Python正则表达式函数的文本处理工具——Calibre电子书编辑器
正则表达式
全栈陈序员5 天前
【Python】基础语法入门(二十九)—— 正则表达式实战:文本处理利器
开发语言·人工智能·python·正则表达式
螺蛳粉 螺蛳粉5 天前
CDH第八篇:CDH 部署排错手册(系列收官):一张表解决 7180 打不开、Parcel 失败、Kafka 起不来
日志分析·故障排查·大数据运维·cdh排错·clouderamanager·系列收官
Software攻城狮7 天前
【uniapp和普通web 端开发的区别】
前端·uni-app·notepad++
BruceXu11 天前
\b 在中文里会静默失效:三个正则坑和一份能用的字符边界方案
正则表达式