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

如何用re.sub精准移除歌词重复无意义串且不误删正常词汇

解决方案

原代码的问题在于用零散子串匹配,既无法精准覆盖连续重复的无意义序列,还容易误删正常词汇里的片段(比如nacht里的na会被误处理)。要精准移除目标字符串,需要针对独立且重复的无意义音节单元设计正则规则:

正则规则设计

  • 匹配连续空格分隔的na序列:\b(na\s+)+na\b
    • \b 确保na是独立单词,不会匹配正常词汇中的子串
    • (na\s+)+ 匹配一个或多个带空格后缀的na
    • 末尾的na匹配最后一个无空格后缀的na
  • 匹配连续空格分隔的ah-ah/ah-ah-ah这类单元:\b(ah(-ah)+\s+)+ah(-ah)+\b
    • ah(-ah)+ 匹配单个带连字符的ah单元(比如ah-ah、ah-ah-ah)
    • 同样用\b确保是独立单元,避免误匹配
  • 匹配独立的yeah:\byeah\b

修改后的代码

import re

lyrics = "say my name say my name drei zwei eins null baby make it rain baby ruf honigtopf tropft bleibe ganze nacht lang online yeah screenshots kopf na na na na na na na baby ruf honigtopf tropft bleibe ganze nacht lang online yeah screenshots kopf na na na na na na na ah-ah ah-ah ah-ah-ah ah-ah ah-ah ah-ah-ah ah-ah ah-ah ah-ah-ah ah-ah ah-ah ah-ah-ah ah-ah ah-ah ah-ah-ah ah-ah ah-ah ah-ah-ah ah-ah ah-ah ah-ah-ah ah-ah ah-ah ah-ah-ah"

# 定义匹配规则
patterns = [
    r'\b(na\s+)+na\b',          # 匹配连续的na na na...
    r'\b(ah(-ah)+\s+)+ah(-ah)+\b',  # 匹配连续的ah-ah ah-ah-ah...
    r'\byeah\b'                 # 匹配独立的yeah
]

# 依次替换所有匹配项
for pattern in patterns:
    lyrics = re.sub(pattern, '', lyrics)

# 清理替换后多余的连续空格
lyrics = re.sub(r'\s+', ' ', lyrics).strip()

print(lyrics)

效果说明

运行后会精准移除所有目标无意义序列,同时保留nacht这类正常词汇中的na部分,最终输出:

say my name say my name drei zwei eins null baby make it rain baby ruf honigtopf tropft bleibe ganze nacht lang online screenshots kopf baby ruf honigtopf tropft bleibe ganze nacht lang online screenshots kopf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:55:19