正则表达式规则
文件名里有日期、序号混在一起?想精准提取某部分内容?正则表达式能帮你搞定复杂的模式匹配和替换。
这个功能能帮你
- 整理带日期的文件:
IMG_20231201_001.jpg这种格式,想改成2023-12-01_No001.jpg标准格式 - 批量删除括号内容:
文件(副本).txt、照片(2).jpg这种,想把所有括号和里面的内容都删掉 - 提取和重组字段:文件名里有多段信息混在一起,想按自己的顺序重新排列
- 精准匹配替换:普通查找替换做不到的复杂规则,比如"只改数字部分"、"只改特定格式的日期"
快速上手(3步)
- 点击"添加规则"按钮 → 选 "正则"
- 填两个框:
- 正则表达式:比如
IMG_(\d{8})_(\d{3})(匹配 IMG_ 开头 + 8 位数字 + _ + 3 位数字) - 替换:比如
Photo_$1_No$2($1 和 $2 代表匹配到的内容)
- 正则表达式:比如
- 先点预览看效果,没问题再点应用,避免一次性改错一堆文件
具体例子
例子1:统一各种编号格式
❌ 原文件:文档No.001.pdf、报告#002.pdf、图片[003].pdf、视频_004.pdf...
😫 问题:从不同来源收集的文件,编号格式五花八门(有的 No.、有的 #、有的 []、有的 _),想统一提取数字部分,改成 文件001.pdf 这种格式
✅ 操作:
- 正则表达式:
(.*?)(?:No\.|#|\[|_)(\d+)(?:\])? - 替换:
$1$2
✅ 结果:文档001.pdf、报告002.pdf、图片003.pdf、视频004.pdf
为什么这样设置:
(.*?)非贪婪匹配文件名开头部分,(?:No\.|#|\[|_)匹配各种编号前缀(但不捕获),(\d+)捕获数字部分,(?:\])?可选匹配右括号。最后$1$2只保留文件名和数字,删掉所有编号符号。
例子2:清理文件名中的特殊符号
❌ 原文件:项目文档@最终版!.docx、照片~2023#.jpg、报告$重要%.pdf...
😫 问题:下载或复制的文件名里混杂着各种特殊符号(@!~#$%),想只保留中文、英文、数字和常用分隔符
✅ 操作:
- 正则表达式:
[^a-zA-Z0-9\u4e00-\u9fa5_\-\s] - 替换:(留空)
- 全局:开启
✅ 结果:项目文档最终版.docx、照片2023.jpg、报告重要.pdf
为什么这样设置:
[^...]代表"不在这个范围内的字符",a-zA-Z0-9是英文和数字,\u4e00-\u9fa5是中文,_\-\s是下划线、连字符和空格。替换留空就是删除所有不在这个范围内的特殊符号。开启"全局"可以删掉所有位置的特殊符号。
例子3:提取混合格式中的关键信息
❌ 原文件:【重要】项目报告-2023.pdf、[紧急]会议记录_1201.docx、(待办)任务清单 v2.xlsx...
😫 问题:文件名开头的标签格式不统一(【】、[]、()),想删掉所有标签,只保留后面的内容
✅ 操作:
- 正则表达式:
^[\[【(].*?[\]】)]\s* - 替换:(留空)
✅ 结果:项目报告-2023.pdf、会议记录_1201.docx、任务清单 v2.xlsx
为什么这样设置:
^代表文件名开头,[\[【(]匹配任意一种左括号,.*?非贪婪匹配括号里的内容,[\]】)]匹配对应的右括号,\s*匹配括号后可能有的空格。替换留空就是删除整个标签部分。
要填的内容
基础设置
-
正则表达式 你想匹配的模式,比如
IMG_(\d{8})_(\d{3})、\([^)]*\)(这个不能留空,否则什么都不会改)新手提示:
\d代表数字,\d{8}代表 8 位数字()括号代表"捕获组",可以用$1、$2引用.*代表任意内容,.*?是非贪婪模式(尽可能少匹配)- 特殊字符需要加
\转义,比如\(、\)、\.
-
替换 改成什么,比如
$1-$2-$3、Photo_$1(留空 = 删除匹配的内容) (可以用$1、$2... 引用正则里的捕获组)
高级选项(不用管也行,默认够用)
-
全局 默认开启,会替换文件名里所有匹配的内容。 如果只想替换第一次匹配的,可以关闭这个选项。
-
区分大小写 默认不勾选,
IMG和img会被当成一样的。 勾选后,IMG和img会被当成不同的词。 -
忽略扩展名 默认勾选,只处理文件名,不动
.jpg、.txt这些后缀。 如果你确实要用正则匹配后缀,可以取消勾选这个选项。
常见问题
❓ 我不会写正则表达式怎么办?
建议1(新手友好):先用简单的模式试试,比如:
\d+:匹配所有数字[a-zA-Z]+:匹配所有字母_、-:直接写普通字符就行
建议2(快速学习):在线工具 regex101.com 可以实时测试你的正则表达式,还有详细解释。
建议3(简单场景):如果只是想替换固定的词,用 查找替换规则 会更简单。
❓ 替换结果不对怎么办?
-
检查括号位置
$1、$2对应的是你正则里()括号的顺序,从左到右数 -
试试非贪婪模式 如果
.*匹配了太多内容,改成.*? -
在预览里测试 先拿几个文件测试,看看匹配结果是不是你想要的
❓ 提示"正则表达式无效"?
最常见原因:
- 括号没配对(比如只写了
(没写)) - 特殊字符没转义(想匹配
.要写\.) - 反斜杠用错了(Windows 路径的
\要写成\\)
❓ 全局匹配和非全局有什么区别?
开启全局(默认):file(1)(2).txt → 删掉所有括号 → file.txt
关闭全局:file(1)(2).txt → 只删第一个括号 → file(2).txt
注意事项:
- ⚠️ 正则写太宽会误删:比如
.*可能把整个文件名都匹配了,先在预览里测试 - ⚠️ 括号和转义容易搞混:
()是捕获组,\(\)才是匹配真正的括号 - ⚠️ 贪婪模式要小心:
.*会尽可能多匹配,需要限制范围时用.*?
进阶技巧
- ✅ 配合"序号填充":先用正则删掉旧序号,再用序号填充加上统一长度的新编号
- ✅ 配合"日期时间":先用正则提取文件名里的日期,再用日期时间规则改成其他格式
- ✅ 需要简单替换?:如果只是想改固定的词,用 查找替换 会更简单
- ✅ 正则太复杂?:可以分两步,先用正则清理,再用其他规则补充