我想重命名一个文件(手动操作是不可能的,懒!)
将“清晰易懂的的线性代数,国立阳明交通大学周志成,国语版mit线性代数Gilbert Strang LA_1-3”改成“LA_1-3”
所以,就想到了正则匹配咯~
🍲直接上代码
import os
import re
# 指定你想要处理文件的目录
directory = './'
# 正则表达式匹配模式
pattern = re.compile(r'LA[_\-\d\w\s]+.*?\.mp4$')
# 遍历指定目录下的所有文件
for filename in os.listdir(directory):
if filename.endswith(".mp4"): # 只处理扩展名为.mp4的文件
match = pattern.search(filename) # 在文件名中搜索匹配的部分
if match:
new_filename = match.group() # 如果找到匹配,使用匹配的字符串作为新文件名
old_path = os.path.join(directory, filename)
new_path = os.path.join(directory, new_filename)
# 重命名文件
# os.rename(old_path, new_path)
print(f'Renamed "{filename}" to "{new_filename}"')
正则表达的解释
正则表达式r'(LA[_\-\d\s]+[\w\s]*\.mp4)$'
:
-
r''
:在字符串前面加上r
表示这是一个原始字符串,这样做可以确保字符串中的反斜杠不会被当作转义字符处理。在Python中编写正则表达式时,通常推荐这么做。 -
LA[_\-\d\w\s]+.*?\.mp4$
:这个表达式从左到右的意思是:-
(
和)
:捕获组,这意味着匹配到的这部分表达式会被作为一个整体处理,可以从匹配结果中单独提取出来。 -
LA
:匹配字面量字符串"LA"。 -
[_\-\d\w\s]+
:这是一个字符集合,它可以匹配下划线_
、短横线-
、任何数字\d
和任何空白字符\s
。+
表示前面的字符集合中的字符至少出现一次。-
_
:匹配下划线字符。 -
\-
:匹配短横线字符。在字符集中,短横线通常用来表示范围(如a-z
),所以当我们想要匹配短横线本身时,需要对它进行转义。 -
\d
:匹配任何数字字符。 -
\w
:匹配任何单词字符(包括字母、数字和下划线)。 -
\s
:匹配任何空白字符(包括空格、制表符、换行符等)。
-
-
.*?
:以非贪婪方式匹配零个或多个任意字符(除换行符外)。 -
\.mp4
:匹配字面量字符串".mp4"。点.
在正则表达式中通常表示匹配任意字符,所以当我们想要匹配点字符本身时,需要对它进行转义\.
。 -
$
:这表示行结束符,确保字符串以我们指定的模式结尾。
-
这个正则表达式用于匹配以"LA"开头,后面跟随至少一个下划线、短横线、数字或字母数字字符,然后是任意数量的任意字符(.*?
表示非贪婪匹配),最后以".mp4"结尾的字符串。
主要是抛砖引玉,触类旁通,下次再遇到类似的,就可以自己修改啦
正则表达式(Regular Expression,简称Regex),其核心思想是模式匹配,通过定义一个搜索模式来匹配字符串中的特定序列,这种模式可以用来进行字符串搜索、替换、分割等操作。
🌟基本用法和常用元字符
1. 字符匹配
.
:匹配任意单个字符,除了换行符。\d
:匹配任意一个数字(0-9)。\w
:匹配任意一个字母、数字或下划线。\s
:匹配任意一个空白字符(空格、制表符等)。
2. 位置匹配
^
:匹配字符串的开始位置。$
:匹配字符串的结束位置。
3. 量词
*
:匹配前面的字符零次或多次。+
:匹配前面的字符一次或多次。?
:匹配前面的字符零次或一次。{n}
:匹配前面的字符n次。{n,}
:匹配前面的字符至少n次。{n,m}
:匹配前面的字符至少n次,但不超过m次。
4. 字符类
[abc]
:匹配任意一个在括号内的字符(a、b或c)。[^abc]
:匹配任意一个不在括号内的字符。
5. 分组和引用
()
:将括号内的字符视为一个单独的分组。可以对整个组应用量词,也可以通过编号或名称引用组内的匹配。|
:逻辑“或”操作符,匹配左边或右边的表达式。
6. 转义
\
:转义特殊字符,使之成为字面量意义上的字符,如\.
表示点字符本身,而不是任意字符的匹配。
正则表达式示例:匹配邮箱
这是一种比较简单的写法:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
-
[a-zA-Z0-9._%+-]+
:这部分匹配电子邮件地址的本地部分,允许字母(无论大小写)、数字、点、下划线、百分号、加号和减号。它假设这些字符可以出现一次或多次。 -
@
:匹配电子邮件地址中的"@“符号。 -
[a-zA-Z0-9.-]+
:这部分匹配电子邮件地址的域名部分,允许字母(无论大小写)、数字、点和减号。它假设这些字符可以出现一次或多次。 -
\.[a-zA-Z]{2,}
:匹配电子邮件地址中的顶级域名,开始于一个点,后面跟着至少两个字母(无论大小写)。这里假设所有的顶级域名至少有两个字符长。