You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正则表达式严格校验指定格式的文件名?

严格校验文件名格式的Python实现

首先明确你需要的严格格式规则:

  • 前缀为一个或多个英文字母(如示例中的abc)
  • 下划线后接合法的英文月份名称(全称或常用缩写均可)
  • 月份名称后必须跟单个数字(0-9)
  • 下划线后接小写的v加单个数字(0-9)
  • 后缀固定为.xlsx,且整个文件名无多余字符

问题分析

你之前的正则r^[A-Za-z]+_[A-Za-z0-9]+_v[0-9]+\.xlsx$存在两个核心问题:

  • 月份部分用[A-Za-z0-9]+过于宽松,允许非月份的字母数字组合(比如123、abc12)
  • [0-9]+会匹配多个数字,不符合你要求的单个数字限制

解决方案

使用re.fullmatch()确保完整匹配,并编写严格限定月份的正则表达式:

import re

def validate_filename(filename):
    # 正则规则:限定合法月份(全称/缩写)、单个数字、完整匹配
    strict_pattern = r'^[A-Za-z]+_(January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[0-9]_v[0-9]\.xlsx$'
    # 启用IGNORECASE支持大小写不敏感(如V2、JAN1也能匹配),不需要可移除该标志
    match_result = re.fullmatch(strict_pattern, filename, flags=re.IGNORECASE)
    return match_result is not None

# 测试用例
test_cases = [
    "abc_Jan1_v2.xlsx",       # 合法
    "sales_October5_v0.xlsx", # 合法
    "abc_123_v1.xlsx",        # 非法:无合法月份
    "abc_Jan12_v3.xlsx",      # 非法:月份后是两位数字
    "abc_Jan1_v3.docx",       # 非法:后缀错误
    "XYZ_Sep9_V4.xlsx"        # 合法(大小写不敏感)
]

for fname in test_cases:
    status = "✅ 合法" if validate_filename(fname) else "❌ 非法"
    print(f"{fname}: {status}")

自定义调整

  • 如果前缀是固定的abc而非任意字母,将正则开头的[A-Za-z]+替换为abc即可
  • 如果不需要大小写敏感,移除flags=re.IGNORECASE,此时v必须为小写,月份名称需与正则内的大小写完全一致
  • 如果只需要支持月份全称或仅支持缩写,修改正则中的月份分组即可(比如只保留Jan|Feb|...|Dec)

内容的提问来源于stack exchange,提问作者Meghna Panda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:15:35