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

求助:批量拆分替换曲目编号序列为艺术家名称的技术问题

处理专辑曲目编号替换的解决方案

听起来你是要批量处理专辑曲目列表,把开头的数字编号去掉,换成指定的艺术家名称对吧?我之前也处理过类似的媒体库整理需求,给你几个精准的方案试试:

核心思路:精准匹配并移除数字编号前缀

首先得覆盖所有可能的数字编号格式:

  • 纯数字(如01)后接空格/直接跟内容
  • 数字加小数点(如01.)后接空格/直接跟内容

方案1:正则表达式匹配替换(推荐)

用正则定位字符串开头的编号部分,确保只替换开头的编号,不会误匹配曲目内容里的数字。

拿Python举个实际可运行的例子:

import re

def replace_track_number(track_str, artist_name):
    # 匹配开头1-2位数字 + 可选小数点 + 0或多个空白符
    pattern = r'^\d{1,2}\.?\s*'
    # 先移除编号前缀,再统一拼接艺术家名称
    cleaned_track = re.sub(pattern, '', track_str)
    return f"{artist_name} - {cleaned_track}"

# 测试你的示例场景
test_cases = [
    "01 Song Artist - Song Name",
    "01. Song Artist - Song Name",
    "01. Song Name"
]
for case in test_cases:
    print(replace_track_number(case, "My Favorite Artist"))

输出结果:

My Favorite Artist - Song Artist - Song Name
My Favorite Artist - Song Artist - Song Name
My Favorite Artist - Song Name

如果你的需求是直接替换编号为艺术家,同时保留原曲目里的艺术家信息,那只需要移除编号即可:

def remove_track_number(track_str):
    pattern = r'^\d{1,2}\.?\s*'
    return re.sub(pattern, '', track_str)

方案2:字符串拆分处理(适合新手/简单场景)

要是正则让你犯难,也可以用更直观的字符串遍历拆分:

def replace_track_number_simple(track_str, artist_name):
    # 先跳过开头的所有数字
    split_idx = 0
    while split_idx < len(track_str) and track_str[split_idx].isdigit():
        split_idx += 1
    # 跳过后续的小数点和空格
    while split_idx < len(track_str) and track_str[split_idx] in '. ':
        split_idx += 1
    # 拼接最终结果
    cleaned_track = track_str[split_idx:]
    return f"{artist_name} - {cleaned_track}"

这个方法对极端格式的兼容性不如正则,但胜在好理解、易调试。

针对你提到的「拆分并替换首个结果」的补充

如果你的“explode”是指按分隔符(比如-)拆分字符串,再替换第一个元素里的编号,那可以这样处理:

def explode_replace_first(track_str, artist_name):
    parts = track_str.split(' - ')
    # 清理第一个部分里的编号
    cleaned_first_part = re.sub(r'^\d{1,2}\.?\s*', '', parts[0])
    # 如果清理后第一个部分为空(比如原内容只有编号),直接替换成艺术家
    if not cleaned_first_part.strip():
        parts[0] = artist_name
    else:
        # 这里可以选择替换成艺术家,或保留原内容(按需调整)
        parts[0] = artist_name
    return ' - '.join(parts)

比如输入01 - Song Name,会输出My Favorite Artist - Song Name;输入01 Song Artist - Song Name,会输出My Favorite Artist - Song Name。

避坑提醒

  • 编号可能是1位(如1)或2位(如10),正则里的\d{1,2}能覆盖这两种情况
  • 编号后可能没有空格(比如01Song Name),\s*可以匹配0或多个空白符,完美兼容
  • 如果曲目本身没有编号,正则不会做任何修改,不会破坏原有内容

你可以根据自己用的编程语言调整代码逻辑,正则的匹配规则是通用的~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:30:01