Notepad++ 正则匹配实战:时间戳及高频场景

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-DDYYYY/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 多行模式与行首/行尾匹配

  • 勾选「多行模式」后,^匹配每行的开头$匹配每行的结尾
  • 未勾选时,^匹配整个文本的开头,$匹配整个文本的结尾;
  • 实战 :仅替换行首的LOGLOG-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})
  • \12026-01-27
  • \201
  • \327
  • \414: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).*$
相关推荐
游戏开发爱好者82 小时前
在 Windows、Linux 与 CI 环境下命令行上传 IPA 到 App Store
linux·windows·ios·ci/cd·小程序·uni-app·iphone
Zach_yuan2 小时前
Linux下的网络基础
linux·运维·服务器·网络
项目申报小狂人2 小时前
中科院1区SCI-哲学命题优化算法Philosophical proposition optimizer-附Matlab免费代码
linux·算法·matlab
济6172 小时前
linux 系统移植(第二十期)---- BusyBox构建根文件系统---- Ubuntu20.04
linux·嵌入式硬件
wangmengxxw2 小时前
SpringAI-mcp-入门案例
java·服务器·前端·大模型·springai·mcp
开开心心就好2 小时前
免费抽奖工具支持批量导入+自定义主题
linux·运维·服务器·macos·pdf·phpstorm·1024程序员节
weixin_449290012 小时前
EverMemOS 访问外部(deepinfra)API接口
java·服务器·前端
名誉寒冰2 小时前
Linux 网络内核:tcp_transmit_skb 与 udp_sendmsg 解析
linux·网络·tcp/ip
GHL2842710902 小时前
*:端口 & 127.0.0.1:端口
运维·服务器·c++