Notepad++ 正则匹配实战:时间戳及高频场景
一、Notepad++ 正则基础前置
1.1 开启正则匹配
- 打开Notepad++,按
Ctrl+F调出「查找」面板(Ctrl+H为替换); - 勾选面板左下角正则表达式(核心),按需勾选「匹配大小写」「全字匹配」「多行模式」;
- 新版Notepad++需注意:默认启用PCRE ,支持
\d/\w/捕获组/非贪婪匹配等,无需额外配置。
1.2 核心元字符(高频使用)
| 元字符 | 含义 | 适用场景 |
|---|---|---|
\d |
匹配单个数字(等价[0-9]) |
时间戳/IP/端口/数字提取 |
\D |
匹配非数字 | 排除数字干扰 |
\w |
匹配字母/数字/下划线 | 混合字符提取 |
\s |
匹配空白符(空格/制表符\t,不匹配全角空格) |
分隔符匹配 |
. |
匹配任意单个字符(默认不匹配换行) | 模糊匹配未知字符 |
* |
前一个字符匹配0次或多次(贪婪) | 任意长度字符匹配 |
+ |
前一个字符匹配1次或多次(贪婪) | 至少1位的字符匹配 |
? |
前一个字符匹配0次或1次/将贪婪改为非贪婪 | 可选字符/避免过度匹配 |
{n,m} |
前一个字符匹配n到m次 | 固定长度匹配(如4位年份) |
^ |
行首(多行模式下生效) | 匹配行开头的内容(如日志行首时间戳) |
$ |
行尾(多行模式下生效) | 匹配行结尾的内容 |
() |
捕获组 | 替换时引用匹配内容(\1/\2/\3) |
| ` | ` | 或 |
1.3 Notepad++ 专属避坑
- 全角空格无法用
\s匹配,需直接输入全角空格 或用\u00A0; - 匹配换行需用
\s\S/[\s\S]代替.(Notepad++中.默认不匹配换行); - 旧版POSIX正则不支持
\d/\w,需替换为[0-9]/[a-zA-Z0-9_]; - 正则中的字面特殊字符 (
./*+?|()等)需转义,加\(如匹配.用\.)。
二、时间戳多格式精准正则匹配(核心场景)
2.1 标准24小时制时间戳(最常用:YYYY-MM-DD HH:mm:ss)
适用场景 :日志、运维数据、数据库导出数据的标准时间戳,如2026-01-27 14:35:28
regex
^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}
说明:
^\d{4}:行首4位年份(加^匹配行首时间戳,日志专用,非行首可去掉);-\d{2}-:月份/日期的横杠分隔,各2位;\s:日期和时间之间的空格;:\d{2}::分钟/秒的冒号分隔,各2位。
2.2 带毫秒/微秒的时间戳(YYYY-MM-DD HH:mm:ss.SSS/SSSSSS)
适用场景 :高精度日志、接口调用日志,如2026-01-27 14:35:28.123/2026-01-27 14:35:28.123456
regex
\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3,6}
说明:
\.\d{3,6}:匹配小数点+3位(毫秒)或6位(微秒)数字,覆盖主流高精度时间戳;- 若固定仅毫秒,改为
\.\d{3}即可。
2.3 无分隔符时间戳(YYYYMMDDHHmmss/YYYYMMDD)
适用场景 :批量命名、数据文件前缀,如20260127143528/20260127
regex
# 完整无分隔符时间戳(YYYYMMDDHHmmss)
\d{14}
# 仅无分隔符日期(YYYYMMDD)
\d{8}
# 无分隔符日期+可选时间(匹配8位或14位)
\d{8}(\d{6})?
2.4 斜杠分隔的时间戳(YYYY/MM/DD HH:mm:ss)
适用场景 :部分系统日志、Excel导出数据,如2026/01/27 14:35:28
regex
\d{4}/\d{2}/\d{2}\s\d{2}:\d{2}:\d{2}
2.5 12小时制带AM/PM的时间戳
适用场景 :海外系统日志,如2026-01-27 02:35:28 PM/2026-01-27 08:10:05 AM
regex
\d{4}-\d{2}-\d{2}\s(0?[1-9]|1[0-2]):\d{2}:\d{2}\s(AM|PM|am|pm)
说明 :(0?[1-9]|1[0-2])匹配1-12小时,支持单/双位(如02/2);(AM|PM|am|pm)忽略大小写匹配上/下午。
2.6 简化格式时间戳(无秒/仅时间/带时区)
regex
# 无秒的时间戳(YYYY-MM-DD HH:mm)
\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}
# 仅时间(HH:mm:ss,如日志中的耗时时间)
\d{2}:\d{2}:\d{2}
# 带时区的时间戳(YYYY-MM-DD HH:mm:ss +0800/UTC)
\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s[+-]\d{4}|UTC
2.7 多分隔符兼容匹配(同时匹配-和/)
适用场景 :文本中同时存在YYYY-MM-DD和YYYY/MM/DD两种格式,一次匹配全部
regex
\d{4}([-/])\d{2}\1\d{2}\s\d{2}:\d{2}:\d{2}
说明 :([-/])捕获分隔符(-或/),\1引用第一个捕获组,确保日期的分隔符一致(避免匹配到2026-01/27这种非法格式)。
三、时间戳相关实战操作(查找/替换)
3.1 提取文本中所有标准时间戳
- 用正则
\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}; - 点击「查找全部」,Notepad++会在下方列出所有匹配结果,可右键「复制查找结果」提取。
3.2 将时间戳的横杠替换为斜杠(如2026-01-27 → 2026/01/27)
- 按
Ctrl+H调出替换面板,勾选「正则表达式」; - 查找内容 :
(\d{4})-(\d{2})-(\d{2})(\s\d{2}:\d{2}:\d{2}); - 替换为 :
\1/\2/\3\4; - 点击「全部替换」,利用捕获组
\1/\2/\3引用年份/月份/日期,保留时间部分不变。
3.3 批量删除时间戳后的多余内容(日志行首时间戳,保留时间戳)
示例 :2026-01-27 14:35:28 [ERROR] 数据库连接失败 → 保留2026-01-27 14:35:28
- 查找内容:
(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}).*; - 替换为:
\1; - 全部替换(
.*匹配时间戳后的所有内容,替换为仅捕获组的时间戳)。
四、高频扩展匹配场景(运维/开发必备)
4.1 匹配IPv4地址(含网段/端口)
regex
# 纯IPv4地址(如192.168.1.1/10.0.0.0)
\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
# IPv4+端口(如192.168.1.1:8080/10.0.0.0:3306)
\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\:\d{1,5}\b
# IPv4网段(如192.168.1.0/24)
\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)/\d{1,2}\b
说明 :\b为单词边界,避免匹配到192.168.1.1234这种非法IP。
4.2 匹配日志中的错误/警告行(行首时间戳+ERROR/WARN)
适用场景 :快速定位日志中的异常行,如2026-01-27 14:35:28 [ERROR] 连接超时
regex
^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s\[?(ERROR|WARN|FATAL)\]?.+
说明 :加^匹配行首,确保是日志行的开头异常,支持[ERROR]或ERROR两种格式。
4.3 匹配手机号/身份证号(国内标准)
regex
# 手机号(11位,支持13/14/15/17/18/19号段)
\b1[345789]\d{9}\b
# 身份证号(18位,含最后一位X/x)
\b\d{17}([0-9Xx])\b
# 15位旧身份证号
\b\d{15}\b
4.4 匹配邮箱地址
适用场景 :提取文本中的邮箱,如admin@example.com/user_123@test.cn
regex
\b[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.]+?\b
4.5 匹配空行/重复行(用于删除)
regex
# 匹配空行(含纯空格/制表符的空行)
^\s*$
# 匹配连续重复行(如两行完全相同的内容,需配合「查找全部」/替换)
^(.*?)\r?\n\1$
实战 :删除空行 → 查找内容^\s*$,替换为留空,全部替换即可。
4.6 匹配运维日志中的进程ID/端口号
regex
# 进程ID(PID,数字,一般1-6位)
\bPID\s*=\s*\d{1,6}|\b\d{1,6}\s*\(PID\)
# 端口号(1-65535,排除0和65536以上)
\b(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3})\b
4.7 匹配JSON/XML中的键值对
适用场景 :快速提取JSON/XML中的指定键值,如"code":200/<name>test</name>
regex
# JSON键值对(匹配指定键,如code,值为数字)
"code"\s*:\s*\d+
# JSON键值对(值为字符串,含双引号)
"name"\s*:\s*"[^"]+?"
# XML键值对(如<key>value</key>)
<(\w+)>.*?</\1>
4.8 匹配URL地址(http/https/ftp)
regex
\b(https?|ftp)://[a-zA-Z0-9-._~:/?#@&=+,%]+?\b
五、Notepad++ 正则高级技巧
5.1 非贪婪匹配(避免过度匹配)
- 默认正则为贪婪匹配 (
*/+会匹配尽可能多的内容),加?可改为非贪婪,适用于匹配中间有相同字符的内容。 - 示例 :匹配
[ERROR] 内容1 [INFO] 内容2中的[ERROR]到[INFO]之间的内容
regex
# 贪婪匹配(错误):\[ERROR\].+
# 非贪婪匹配(正确):\[ERROR\].+?\[INFO\]
5.2 多行模式与行首/行尾匹配
- 勾选「多行模式」后,
^匹配每行的开头 ,$匹配每行的结尾; - 未勾选时,
^匹配整个文本的开头,$匹配整个文本的结尾; - 实战 :仅替换行首的
LOG为LOG-2026,需勾选多行模式,查找内容^LOG,替换为LOG-2026。
5.3 反向匹配(匹配不包含指定内容的行)
- Notepad++正则支持负向预查 ,用于匹配不包含某个关键字的行;
- 示例 :匹配日志中不含
SUCCESS的行
regex
^(?!.*SUCCESS).*$
说明 :(?!.*SUCCESS)为负向预查,表示行首后不包含SUCCESS,.*$匹配整行内容。
5.4 批量替换时的捕获组高级用法
- 捕获组可嵌套,编号按左括号出现的顺序;
- 示例 :匹配
2026-01-27 14:35:28的嵌套捕获组
regex
(\d{4}-(\d{2})-(\d{2}))\s(\d{2}:\d{2}:\d{2})
\1:2026-01-27\2:01\3:27\4:14:35:28- 替换时可自由组合,如
\2-\3-\1 \4,将日期改为01-27-2026。
六、总结与常用正则速查
6.1 核心总结
- Notepad++时间戳匹配的关键是按格式拆分字段 (年/月/日/时/分/秒),用
\d{n}固定长度,结合分隔符精准匹配; - 日常使用优先简易正则,无需过度追求日期合法性校验,匹配后再做人工/工具校验即可;
- 正则的贪婪/非贪婪 、捕获组 、负向预查是解决复杂匹配的核心,需结合场景灵活使用;
- 运维/开发中,先通过「查找全部」验证正则的匹配结果,再执行「全部替换」,避免误操作。
6.2 常用正则速查(直接复制使用)
| 匹配场景 | 正则表达式 |
|---|---|
| 标准时间戳(YYYY-MM-DD HH:mm:ss) | \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2} |
| 带毫秒时间戳 | \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3} |
| IPv4地址 | `\b((25[0-5] |
| 手机号 | \b1[345789]\d{9}\b |
| 日志错误行 | ^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s\[?ERROR\]?.+ |
| 空行 | ^\s*$ |
| 邮箱 | \b[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.]+?\b |
| 反向匹配(不含SUCCESS) | ^(?!.*SUCCESS).*$ |