我想重命名一个文件(手动操作是不可能的,懒!)
将“清晰易懂的的线性代数,国立阳明交通大学周志成,国语版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,}:匹配电子邮件地址中的顶级域名,开始于一个点,后面跟着至少两个字母(无论大小写)。这里假设所有的顶级域名至少有两个字符长。