正则表达式的使用示例--Everything文件检索批量重命名工具

一、引言

Everything是一款非常实用的文件搜索工具,它可以帮助您快速定位并查找计算机中的文件和文件夹。Everything搜索文件资料之神速,有使用过的朋友们都深有体会,相对于Windows自带的搜索功能,使用Everything,可以让我们享受使用搜索引擎一般地在本地硬盘上搜索我们的文件信息。

本文将为您提供一些基本的使用指南,并介绍我的使用经验,希望大家可以更好地利用Everything这个工具。

二、本文使用场景

文件检索、文件重命名

今天小编在进行数据处理的时候,遇到一个文件重命名的问题,在网上查了好多内容,也没有找到合适的方法,小编自己测试的方法,现将经验的方法分享给大家,希望对大家有帮助。

以下是具体的问题情况描述如下:

    1. 搜索文件名称以数字开头,且数字的位数为1位数字;
    1. 文件的格式后缀为.jpg
    1. 文件名称中包含汉字;
    1. 将文件名称的1位数字修改为2位数字,就是在文件名是数字开头的1位数字的前面加个0;
    1. 需要修改的文件数量100+,一个一个的改太费劲了(还是得想办法啊);
    1. 文件夹内还包含子文件夹,子文件夹内的文件名称也需要修改;

例如:

需要将 "1测试数据16.jpg" 修改为 "01.测试数据.jpg"

注意在01后面需要加一个.并去掉汉字后面的数字

需要说明的是修改文件名称这样的问题也可以使用python编写修改文件名称的py文件。由于我之前安装了Everything这个工具【点击此处下载】,所以想偷个懒,想结合正则表达式,利用Everything的重命名功能。(有没有不知道的Everything可以重命名的小伙伴呢?----莫名的优越感,嘿嘿!)


三、正则表达式

要想发挥Everything高效的优势,那就必须得懂得使用正则表达式

正则表达是的语法在此我就不再赘述了。在网上一搜有很多:

想要学习的伙伴,小编推荐网站-点击此处打开【菜鸟教程】进行学习

本文可能用到用到的知识点:

正则表达式元字符和特性

字符匹配

  • 普通字符:普通字符按照字面意义进行匹配,例如匹配字母 "a" 将匹配到文本中的 "a" 字符。
  • 元字符:元字符具有特殊的含义,例如\d匹配任意数字字符,\w 匹配任意字母数字字符,. 匹配任意字符(除了换行符),\p{Han}匹配汉字等字符...
  • 量词
    *:匹配前面的模式零次或多次。
    +:匹配前面的模式一次或多次。
    ?:匹配前面的模式零次或一次。
    {n}:匹配前面的模式恰好 n 次。
    {n,}:匹配前面的模式至少 n 次。
    {n,m}:匹配前面的模式至少 n 次且不超过 m 次。
  • 字符类
    [ ]:匹配括号内的任意一个字符。例如,[abc] 匹配字符 "a"、"b" 或 "c"。
    [^ ]:匹配除了括号内的字符以外的任意一个字符。例如,[^abc] 匹配除了字符 "a"、"b" 或 "c" 以外的任意字符。
  • 边界匹配
    ^:匹配字符串的开头。
    $:匹配字符串的结尾。
    \b:匹配单词边界。
    \B:匹配非单词边界。
  • 分组和捕获
    ( ):用于分组和捕获子表达式。(本文需要着重理解的地方,可以结合后面文件重命名进行理解)
    (?: ):用于分组但不捕获子表达式,(暂时还没有实践案例)。
  • 特殊字符
    \:转义字符,用于匹配特殊字符本身。
    .:匹配任意字符(除了换行符)。
    |:用于指定多个模式的选择。

四、使用示例分享

1.如何使用正则表达式匹配汉字(此方法比较便捷)?

  • 使用元字符进行汉字匹配,下述表示的是匹配任意一个汉字字符。

    regex:\p{Han}

  • 使用元字符进行汉字匹配,下述表示的是匹配任意一个汉字字符开头。可以使用^筛选开头,$筛选结尾。点击菜单栏/帮助/正则表达式语法即可查看,不再赘述。

    regex:^\p{Han}

  • 至于应为英文字字母

    regex:[a-zA-Z]

  • 至于数字

    regex:[0-9]
    或者
    regex:\d #注意不是一位数字,只要文件(夹)名称是包含数字就被检索出来

如下图所示:

2.如何找到以1位数字开头的文件?

以下几种方法等价^$放在括号里面和外面都一样,后面我将介绍括号的用法。

regex:^([0-9])$
regex:(^[0-9])$
regex:(^[0-9]$)
regex:(^[0-9]{1}$)

...
或者:
regex:(^\d$)
regex:(^\d)$
regex:^(\d)$
regex:^(\d{1})$

如果想检索2位数字那就把{1}改成{2},依次类推
regex:(^[0-9]{2}$)
regex:^(\d{2})$

...

如下图所示,检索结果只有4502个,大大的提升效率(后续检索表达式不再逐一截图了,各位可以自行修改表达式进行尝试!)

3.使用转义字符\,转义符号.

4.想要检索某个文件夹下面的文件

那就直接在搜索框内输入文件路径,点击空格再添加相应的正则表达公式。

需要说明的是,在进行检索的过程中,如果检索的路径中包含子文件夹,那么如何排除子文件夹的遍历结果呢?只需要在需要检索的路径前面添加一个parent:[需要检索的路径],如下所示:

parent:C:\Users\XXX\Desktop\

上述代码只会检索到桌面上的文件和文件夹,子文件夹内的内容将不会被检索到。

4.如何进行重命?(本文重点介绍内容

打开Everything,在搜索框内输入需要重命名的文件路径,根据需求设置检索的正则表达式,就会显示搜索的文件了。

选中需要重命名的文件,右键/重命名即可弹出重命名的窗口。

首选筛选区文件(在右上角可以选择文件类型,也可直接写在搜索框内)

例1:

回到以文章开头的问题,如何进行文件重命名?

regex:(^\d)\p{Han}+\d{2}\.jpg
正则表达式 说明
(^\d) 表示以1位数字开头
\p{Han}+ 1个或者多个汉字符号(注意*表示0个或者多个)
\d{2} 匹配两位数字
\.jpg 匹配后后缀名为.jpg,\是为了转义.

例2:

对比类型 看图理解
添加parent:
不添加parent:
重命名

这里我们讲一下()保存子表达式的匹配的用法【着重理解的内容】。

说明:
原始文件名称的表达可以理解为二次检索,在第一次检索的基础上在进行检索,满足要求的就可以基于规则进行重命名。

例如:
(^\d{2})(\p{Han}+)(\d{2,})(\.jpg)$

上述表达是中:
(^\d{2})是两位数字。在新命名的表达式中对应的就是\1
(\p{Han}+)匹配1个或多个汉字。在新命名的表达式中对应的就是\2
(\d{2,})至少匹配2位数字;在新命名的表达式中对应的就是\3
(\.jpg)$匹配后缀为.jpg的文件;在新命名的表达式中对应的就是\4
\0默认的是原始文件名。

同时满足上述要求的是:

01测试数据比52.jpg

12比423.jpg

12比423.jpg

因此新文件名的表达是为00\1\2\4

重命名后的的文件前面会添加00,同时去掉后面的数字,重命名后的结果为

0001.测试数据比.jpg

0012.比.jpg

0012.比.jpg

其余的不符合正则表达是的规则,因此不进行重命名!

整体的思想(个人的看法)是使用正则表达式将原始的文件名称进行分段,然后使用\0-\9进行拼接,类似与python列表的切片

至此问题完美解决,不知我讲的清不清楚,如有疑问,欢迎留言讨论,我会继续完善我的文章内容。


五、小结

  • \p{Han} 是一个 Unicode 字符类,表示中文汉字。在正则表达式中使用 \p{Han} 可以匹配任何属于 Unicode 汉字类别(如中文、日文或韩文等东亚语言中的汉字)的字符。

  • 正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据。在很多语言(如 JavaScript、Python、Java、Perl 等)中都有嵌入,了解并熟练运用正则表达式,便得心应手。

  • Everything是一款功能强大且易于使用的文件搜索工具,结合正则表达式使用可以达到事半功倍的效果。

  • 小编系需要说的是数据安全的问题,Everything虽然好用,如果设置不当,将会导致信息泄露,因此在不明确具体功能的情况下,不要随意点击。以下是关于Everything信息安全的介绍,感兴趣的小伙伴可以看一下,做到心中有数。

文章编写不易,欢迎一键三连!!

相关推荐
西洼工作室14 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式
kiss strong1 天前
正则表达式
正则表达式
Linux运维技术栈1 天前
Python字符串及正则表达式(十一):正则表达式、使用re模块实现正则表达式操作
开发语言·python·正则表达式
jackiendsc1 天前
Java中正则表达式的介绍、使用场景及示例代码
java·开发语言·正则表达式
taller_20001 天前
VBA之正则表达式(48)-- 快速拆分中文语句
正则表达式·正则·拆分中文·中文拆分·中文标点
梧桐树04291 天前
python:正则表达式
数据库·python·正则表达式
葡萄架子1 天前
Python中的正则表达式
python·mysql·正则表达式
Oneforlove_twoforjob2 天前
【Java】正则表达式基础题+场景题练习
正则表达式
产幻少年3 天前
正则表达式
正则表达式
Spcarrydoinb3 天前
正则表达式
笔记·学习·正则表达式·脚本语言