正则表达式的使用示例--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信息安全的介绍,感兴趣的小伙伴可以看一下,做到心中有数。

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

相关推荐
吴声子夜歌1 天前
正则表达式——环视
开发语言·正则表达式
吴声子夜歌2 天前
正则表达式——边界
正则表达式
营养充电站2 天前
C++23 新特性在 CLion 中的实战体验
macos·docker·jupyter·正则表达式
吴声子夜歌3 天前
正则表达式——字符组
正则表达式
天若有情6733 天前
自制浏览器端文本批量处理小工具,支持查找替换、内容删除、正则表达式,开箱即用
正则表达式
吴声子夜歌3 天前
正则表达式——简单的模式匹配
正则表达式
吴声子夜歌3 天前
正则表达式——前后查找
正则表达式
吴声子夜歌3 天前
正则表达式参考
正则表达式
吴声子夜歌4 天前
正则表达式——常见应用软件和编程语言中的正则表达式
正则表达式
吴声子夜歌4 天前
正则表达式——使用子表达式
正则表达式