正则表达式规则

文件名里有日期、序号混在一起?想精准提取某部分内容?正则表达式能帮你搞定复杂的模式匹配和替换。

这个功能能帮你

  • 整理带日期的文件IMG_20231201_001.jpg 这种格式,想改成 2023-12-01_No001.jpg 标准格式
  • 批量删除括号内容文件(副本).txt照片(2).jpg 这种,想把所有括号和里面的内容都删掉
  • 提取和重组字段:文件名里有多段信息混在一起,想按自己的顺序重新排列
  • 精准匹配替换:普通查找替换做不到的复杂规则,比如"只改数字部分"、"只改特定格式的日期"

快速上手(3步)

  1. 点击"添加规则"按钮 → 选 "正则"
  2. 填两个框
    • 正则表达式:比如 IMG_(\d{8})_(\d{3})(匹配 IMG_ 开头 + 8 位数字 + _ + 3 位数字)
    • 替换:比如 Photo_$1_No$2($1 和 $2 代表匹配到的内容)
  3. 先点预览看效果,没问题再点应用,避免一次性改错一堆文件

具体例子

例子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-$3Photo_$1 (留空 = 删除匹配的内容) (可以用 $1$2... 引用正则里的捕获组)

高级选项(不用管也行,默认够用)

  • 全局 默认开启,会替换文件名里所有匹配的内容。 如果只想替换第一次匹配的,可以关闭这个选项。

  • 区分大小写 默认不勾选IMGimg 会被当成一样的。 勾选后,IMGimg 会被当成不同的词。

  • 忽略扩展名 默认勾选,只处理文件名,不动 .jpg.txt 这些后缀。 如果你确实要用正则匹配后缀,可以取消勾选这个选项。

常见问题

❓ 我不会写正则表达式怎么办?

建议1(新手友好):先用简单的模式试试,比如:

  • \d+:匹配所有数字
  • [a-zA-Z]+:匹配所有字母
  • _-:直接写普通字符就行

建议2(快速学习):在线工具 regex101.com 可以实时测试你的正则表达式,还有详细解释。

建议3(简单场景):如果只是想替换固定的词,用 查找替换规则 会更简单。

❓ 替换结果不对怎么办?

  1. 检查括号位置 $1$2 对应的是你正则里 () 括号的顺序,从左到右数

  2. 试试非贪婪模式 如果 .* 匹配了太多内容,改成 .*?

  3. 在预览里测试 先拿几个文件测试,看看匹配结果是不是你想要的

❓ 提示"正则表达式无效"?

最常见原因:

  • 括号没配对(比如只写了 ( 没写 )
  • 特殊字符没转义(想匹配 . 要写 \.
  • 反斜杠用错了(Windows 路径的 \ 要写成 \\

❓ 全局匹配和非全局有什么区别?

开启全局(默认)file(1)(2).txt → 删掉所有括号 → file.txt 关闭全局file(1)(2).txt → 只删第一个括号 → file(2).txt

注意事项

  • ⚠️ 正则写太宽会误删:比如 .* 可能把整个文件名都匹配了,先在预览里测试
  • ⚠️ 括号和转义容易搞混() 是捕获组,\(\) 才是匹配真正的括号
  • ⚠️ 贪婪模式要小心.* 会尽可能多匹配,需要限制范围时用 .*?

进阶技巧

  • 配合"序号填充":先用正则删掉旧序号,再用序号填充加上统一长度的新编号
  • 配合"日期时间":先用正则提取文件名里的日期,再用日期时间规则改成其他格式
  • 需要简单替换?:如果只是想改固定的词,用 查找替换 会更简单
  • 正则太复杂?:可以分两步,先用正则清理,再用其他规则补充

下一步看看什么?