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

求助:Python正则表达式替换适配多格式文件名的正确写法

正则表达式处理文件名问题解决

问题背景

需要用Python正则表达式处理文件名,现有代码仅支持包含_[0-9]*模式的输入,无法适配不含该模式的场景,目标是让以下三种输入都得到统一的期望输出:

  • 输入:usa_t1_usq_t1_[0-9]*.csv → 期望输出:usa_t1_usq_t1
  • 输入:usa_t1_usq_t1_[0-9]*.gzip.csv → 期望输出:usa_t1_usq_t1
  • 输入:usa_t1_usq_t1.gzip.csv → 期望输出:usa_t1_usq_t1

现有代码:

import re
Country_name = "usa_t1_usq_t1_[0-9]*.csv"
new_result = re.sub(r'(?:_[[0-9-]+].*[a-zA-Z])+', '', Country_name)

# Display the Content
print(new_result)

解决方案

这里提供两种可行的正则表达式方案,都能适配所有场景:

方案1:替换需要移除的后缀部分

使用正则匹配两种后缀模式(含_[0-9]*的后缀或直接以.开头的后缀),替换为空字符串即可:

import re

test_cases = [
    "usa_t1_usq_t1_[0-9]*.csv",
    "usa_t1_usq_t1_[0-9]*.gzip.csv",
    "usa_t1_usq_t1.gzip.csv"
]

# 正则解释:匹配以_[0-9]*开头的任意内容,或以.开头的任意内容
pattern = r'(?:_[0-9]*|\.)\S+'

for case in test_cases:
    result = re.sub(pattern, '', case)
    print(f"输入: {case} → 输出: {result}")

方案2:提取目标前缀部分

通过正则匹配并提取目标前缀(直到遇到_[0-9]*或.为止):

import re

test_cases = [
    "usa_t1_usq_t1_[0-9]*.csv",
    "usa_t1_usq_t1_[0-9]*.gzip.csv",
    "usa_t1_usq_t1.gzip.csv"
]

# 正则解释:从开头匹配任意内容(非贪婪),直到遇到_[0-9]*或.
pattern = r'^(.+?)(?:_[0-9]*|\.)'

for case in test_cases:
    match_result = re.search(pattern, case)
    if match_result:
        print(f"输入: {case} → 输出: {match_result.group(1)}")

两种方案运行后都会输出符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:05:37