我想重命名一个文件(手动操作是不可能的,懒!)

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