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

如何按'['和']'分割字符串并保留括号内内容?

分割带方括号标记的歌词并保留标记内容的Python解决方案

嘿,我来帮你搞定这个需求!你要处理的是带[Chorus: ...]这类标记的歌词字符串,既要把对应的歌词段落分割出来,又想保留那些括号里的标记内容对吧?用Python的正则表达式比单纯用split()要靠谱得多,直接看代码和解释:

完整实现代码

import re

# 你的原始歌词字符串(注意这里把&替换回了&,如果实际处理的是转义后的字符串可以保留)
x = "[Chorus: Rihanna & Swizz Beatz] I just wanted you to know ...more lyrics [Verse 2: Kanye West & Swizz Beatz] I be Puerto Rican day parade floatin' ... more lyrics"

# 用正则表达式匹配每一组「标记+歌词」
pattern = r'\[([^\]]+)\]\s*(.*?)(?=\[|$)'
matched_pairs = re.findall(pattern, x)

# 分离标记和歌词段落
section_labels = [pair[0] for pair in matched_pairs]
split_lyrics = [pair[1] for pair in matched_pairs]

# 输出结果
print("保留的括号内标记:", section_labels)
print("分割后的歌词段落:", split_lyrics)

代码解释

  • 正则表达式r'\[([^\]]+)\]\s*(.*?)(?=\[|$)'的含义:

    • \[([^\]]+)\]:精准匹配方括号,同时捕获括号里的所有内容(比如Chorus: Rihanna & Swizz Beatz),[^\]]+表示匹配任意非]的字符,确保只捕获括号内的部分。
    • \s*:匹配括号后面的任意空白字符(空格、换行都算),避免歌词开头带多余空格。
    • (.*?):用非贪婪模式捕获后续的歌词内容,直到遇到下一个[或者字符串结尾。
    • (?=\[|$):正向预查,确保歌词内容截止到下一个标记的开头或者字符串末尾,不会把下一个标记的内容也包含进来。
  • 运行结果:
    你会得到:

    保留的括号内标记: ['Chorus: Rihanna & Swizz Beatz', 'Verse 2: Kanye West & Swizz Beatz']
    分割后的歌词段落: ['I just wanted you to know ...more lyrics', 'I be Puerto Rican day parade floatin\' ... more lyrics']
    

    其中split_lyrics就是你期望得到的分割结果。

为什么不用split()?

单纯用split('[')或者split(']')只能把字符串切成零散的片段,没法同时把标记和对应的歌词对应起来,还要额外处理很多冗余内容,正则的findall()可以一次性完成匹配和分组,效率和可读性都更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:20:11