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

Python字符串多名称拆分及歌曲feat列拆分合并至标题的实现方法

1. Python拆分以分隔符分隔的多名称字符串

直接用字符串的split()方法指定分隔符即可,若分隔符前后存在多余空格,拆分后可搭配strip()清除每个元素的空白字符。

示例代码:

# 以'-'为分隔符拆分字符串
name_str = "Ed Sheeran - Cardi B - Camila Cabello"
names = [name.strip() for name in name_str.split('-')]
print(names)
# 输出: ['Ed Sheeran', 'Cardi B', 'Camila Cabello']

如果分隔符不固定(比如混合多个空格和'-'),可以用正则表达式的re.split()处理:

import re
name_str = "Ed Sheeran  - Cardi B   Camila Cabello"
names = [name.strip() for name in re.split(r'[- ]+', name_str) if name.strip()]
print(names)
# 输出: ['Ed Sheeran', 'Cardi B', 'Camila Cabello']
2. 拆分feat艺术家并合并到歌曲标题

针对你提供的示例数据(每行结构为主艺术家 - feat艺术家1 - feat艺术家2 - 歌曲名 粉丝数),可以通过以下步骤处理:提取feat艺术家列表,将其合并到歌曲标题中(格式为歌曲名 (feat. 艺术家1, 艺术家2)),同时保留主艺术家和粉丝数字段。

处理单行文本的示例代码

# 示例数据
data = [
    "Ed Sheeran - Cardi B - Camila Cabello - Cheat   south of the  71783101",
    "Ed Sheeran - Chris Stapleton - Bruno Mars       blow          71783101"
]

processed_data = []
for line in data:
    # 按'-'拆分并清理空白
    parts = [p.strip() for p in line.split('-') if p.strip()]
    # 提取主艺术家
    main_artist = parts[0]
    # 拆分最后一部分,分离歌曲名和粉丝数
    title_followers = parts[-1].split()
    followers = title_followers[-1]
    title = ' '.join(title_followers[:-1])
    # 提取feat艺术家(中间的元素)
    feat_artists = parts[1:-1]
    
    # 合并标题与feat信息
    full_title = f"{title} (feat. {', '.join(feat_artists)})" if feat_artists else title
    
    processed_data.append({
        'Artist': main_artist,
        'Title': full_title,
        'Artist_followers': followers
    })

# 输出处理结果
for item in processed_data:
    print(item)

运行后输出:

{'Artist': 'Ed Sheeran', 'Title': 'Cheat south of the (feat. Cardi B, Camila Cabello)', 'Artist_followers': '71783101'}
{'Artist': 'Ed Sheeran', 'Title': 'blow (feat. Chris Stapleton, Bruno Mars)', 'Artist_followers': '71783101'}

处理Pandas DataFrame的示例代码

如果数据是DataFrame格式,可使用以下代码:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'raw_data': [
        "Ed Sheeran - Cardi B - Camila Cabello - Cheat   south of the  71783101",
        "Ed Sheeran - Chris Stapleton - Bruno Mars       blow          71783101"
    ]
})

# 定义处理函数
def process_row(row):
    parts = [p.strip() for p in row['raw_data'].split('-') if p.strip()]
    main_artist = parts[0]
    title_followers = parts[-1].split()
    followers = title_followers[-1]
    title = ' '.join(title_followers[:-1])
    feat_artists = parts[1:-1]
    
    full_title = f"{title} (feat. {', '.join(feat_artists)})" if feat_artists else title
    
    return pd.Series({
        'Artist': main_artist,
        'Title': full_title,
        'Artist_followers': followers
    })

# 应用函数处理数据
processed_df = df.apply(process_row, axis=1)
print(processed_df)

输出结果:

Artist                                          Title Artist_followers
0  Ed Sheeran  Cheat south of the (feat. Cardi B, Camila Cabello)         71783101
1  Ed Sheeran              blow (feat. Chris Stapleton, Bruno Mars)         71783101

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:30:44