如何使用Python正则表达式去除文件名中指定格式的后缀?
解决文件名特定后缀移除问题
问题分析
你需要移除文件名末尾符合以下格式的后缀:
- 4位数字(对应
YYYY) - 8位数字(对应
yyyymmdd或YYYYmmdd) - 14位数字(对应
YYYYMMDDHHMMSS)
之前的正则表达式逻辑完全错误,所以没有生效。
正确实现方案
使用Python的re.sub(),匹配文件名末尾以上划线开头、后跟指定长度数字的后缀,将其替换为空即可。
代码示例
import re filenames = [ "ios_g1_v1_yyyymmdd", "ios_g1_v1_h1_yyyymmddhhmmss", "ios_g1_v1_h1_YYYYMMDDHHMMSS", "ios_g1_v1_g1_YYYY", "ios_g1_v1_j1_YYYYmmdd", "ios_g1_v1", "ios_g1_v1_t1_h1", "ios_g1_v1_ty1_f1" ] # 正则表达式:匹配结尾的_4位数字/_8位数字/_14位数字 pattern = r'_(\d{4}|\d{8}|\d{14})$' for filename in filenames: trimmed = re.sub(pattern, '', filename) print(trimmed)
正则说明
_:匹配后缀前的下划线(\d{4}|\d{8}|\d{14}):分组匹配4位、8位或14位数字,对应你要移除的四种日期格式$:锚定字符串结尾,确保只替换末尾的后缀,不会误删中间的数字
输出结果
ios_g1_v1 ios_g1_v1_h1 ios_g1_v1_h1 ios_g1_v1_g1 ios_g1_v1_j1 ios_g1_v1 ios_g1_v1_t1_h1 ios_g1_v1_ty1_f1
原代码错误原因
你写的.*[^YYYYMMDDHHMMSS]$逻辑是:匹配任何不以Y、M、D、H、S结尾的字符串,然后替换为空。这和你的需求完全相反,导致需要处理的文件因为结尾是这些字符而不被匹配,不需要处理的文件反而被清空,所以没有效果。
内容的提问来源于stack exchange,提问作者BigD
相关产品推荐
相关产品推荐

