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

如何提取文件名开头的字母数字混合编号(适配下划线与连字符分隔场景)

提取文件名开头的字母数字编号方案

嘿,这个需求我之前处理批量文件重命名时刚好碰到过,分享几个靠谱的解决方法给你:

方法1:正则表达式(最推荐)

正则是处理这类模式匹配最直接高效的方式,我们可以写一个精准的规则,匹配文件名开头的所有字母数字字符,直到遇到第一个下划线_或者连字符-为止。

正则规则说明

^[A-Za-z0-9]+(?=[_-])

  • ^:锁定字符串起始位置,确保只从文件名开头开始匹配
  • [A-Za-z0-9]+:匹配一个或多个字母/数字,完美对应你的编号格式
  • (?=[_-]):正向预查,保证匹配的字符后面紧跟着下划线或连字符,但不会把分隔符包含在最终结果里

Python 示例代码

import re

def get_filename_prefix(filename):
    # 匹配开头的字母数字编号
    match_result = re.match(r'^[A-Za-z0-9]+(?=[_-])', filename)
    # 匹配成功返回编号,否则返回None(可根据需求调整默认值)
    return match_result.group(0) if match_result else None

# 测试你的示例文件名
print(get_filename_prefix("12345V001_Test1-Test2-Test3.jpg"))  # 输出: 12345V001
print(get_filename_prefix("12345V001-Test1_Test2-Test3.jpg"))  # 输出: 12345V001

方法2:字符串分割法

如果你对正则不太熟悉,也可以通过定位第一个分隔符的位置来截取前缀:

Python 示例代码

def extract_prefix_via_split(filename):
    # 获取下划线和连字符的位置
    underscore_pos = filename.find('_')
    dash_pos = filename.find('-')
    
    # 收集有效分隔符的位置
    split_positions = []
    if underscore_pos != -1:
        split_positions.append(underscore_pos)
    if dash_pos != -1:
        split_positions.append(dash_pos)
    
    if split_positions:
        first_split_pos = min(split_positions)
        return filename[:first_split_pos]
    # 没有找到分隔符时的返回值,可根据需求修改
    return None

# 测试
print(extract_prefix_via_split("12345V001_Test1-Test2-Test3.jpg"))  # 输出: 12345V001
print(extract_prefix_via_split("12345V001-Test1_Test2-Test3.jpg"))  # 输出: 12345V001

两种方法对比

  • 正则法更简洁健壮,后续如果文件名格式有微小调整(比如分隔符前后出现空格),修改正则规则即可适配
  • 分割法更直观易懂,适合对正则不太熟悉的开发者,代码可读性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:12:49