如何在Notepad++中用正则表达式提取HH:MM格式课程时长
问题:在Notepad++中提取(HH:MM)格式的时长内容
我使用最新版Notepad++,有一份在线课程的课时列表文本,想要提取其中(HH:MM)格式的时长来汇总总时长。
示例输入文本:
Lecture 1. Programming robots (15:32) Understanding ROS (8:20)
期望输出:
(15:32) (8:20)
我尝试过以下正则表达式,但无法匹配到内容:
^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$ /^(0?[1-9]|1[0-2]):[0-5][0-9]$/
也考虑过是否可以通过删除所有字母字符来实现,请问该怎么操作?
解决方案
方法一:正则匹配提取(推荐)
你之前的正则失效是因为加了^和$——这两个符号要求整行完全匹配时间格式,但你的时长只是每行的一部分,自然匹配不到。
用下面的正则就能精准定位带括号的时间:
\((\d{1,2}:\d{2})\)
如果要更严谨地限制小时(0-23)和分钟(0-59)的范围,可以用:
\(([01]?\d|2[0-3]):([0-5]\d)\)
具体操作步骤:
- 打开Notepad++加载目标文本
- 按
Ctrl+H打开替换窗口 - 勾选「正则表达式」模式(不要勾选「.匹配换行符」)
- 在「查找目标」框输入:
.*(\(\d{1,2}:\d{2}\)).* - 在「替换为」框输入:
\1 - 点击「全部替换」,此时每行的时间会被单独保留,其他内容被删除
- 最后用
Ctrl+H查找^$(空行),替换为空即可清理多余空行
方法二:删除非目标内容提取
如果想用删除无关字符的方式实现:
- 打开替换窗口(
Ctrl+H),切换到正则表达式模式 - 「查找目标」输入:
[^()\d:]——这个表达式会匹配所有不是括号、数字、冒号的字符 - 「替换为」留空,点击「全部替换」
- 此时文本会变成类似
1.(15:32)(8:20)的形式,再用方法一的正则替换,或者手动拆分每行一个时间即可
内容的提问来源于stack exchange,提问作者VansFannel
相关产品推荐
相关产品推荐

