PythonFindall-忽略某些结果

PythonFindall-忽略某些结果,python,regex,python-3.x,findall,Python,Regex,Python 3.x,Findall,我正在做一个程序,将来将解释YouTube视频的搜索结果。我的代码片段版本旨在从歌曲标题中提取艺术家的笔名 实例 我有一个保存在字符串中的标题:“Drake ft.DJ Khalid,Nicki Minaj-‘为什么未来’(官方视频)”,我想忽略findall函数中的‘未来’一词(因为它是标题歌的一部分,不是说唱歌手/艺术家的尼克),它介于‘和’字符之间。 此外,我对“DJ Khalid”有一个问题,因为findall返回了两个说唱歌手的刻痕(DJ Khalid和Khalid),而不是一个刻痕(

我正在做一个程序,将来将解释YouTube视频的搜索结果。我的代码片段版本旨在从歌曲标题中提取艺术家的笔名

实例 我有一个保存在字符串中的标题:“Drake ft.DJ Khalid,Nicki Minaj-‘为什么未来’(官方视频)”,我想忽略findall函数中的‘未来’一词(因为它是标题歌的一部分,不是说唱歌手/艺术家的尼克),它介于‘和’字符之间。 此外,我对“DJ Khalid”有一个问题,因为findall返回了两个说唱歌手的刻痕(DJ Khalid和Khalid),而不是一个刻痕(应该是同一个DJ Khalid)

密码 后果 实际结果是:
Drake x Khalid x Nicki Minaj x DJ Khalid x Future
(因为在我的说唱歌手名单中,不幸的是,我有一个叫Future的人)

应为:
Drake x DJ Khalid x Nicki Minaj


如何以最佳方式(最佳优化)完成此操作?提前感谢您的帮助。

归功于@FailSafe for pattern。OP,此答案证明@FailSafe建议的内容确实正确:

import re

edit_string = "Drake ft. DJ Khalid, Nicki Minaj - "Why Futures " (Official video)"
rappers_list = ['Drake', 'DJ Khalid', 'Nicki Minaj', 'Future']#open_csv() #list of rapper's nicks

new_title = []
for rapper_name in rappers_list:
    yer = '(?i)\\b'+str(rapper_name)+'\\b'
    if re.findall(yer.lower(), edit_string.lower()): 
        new_title.append(rapper_name)
new_title = ' x '.join(new_title)
print(new_title)
edit_string = new_title  

Output: 
## Drake x DJ Khalid x Nicki Minaj  

可能需要使用
wordbounds\b
r
选项。你的名单上有多少艺术家?第二,你如何处理像“DJ Khalid”这样的事情?第三,“我一直很冷静,不要对我发火”…(我不得不)我有大约300名说唱歌手。在添加了“DJ Khalid”(忘记他)之后不幸的是,在我的列表中,我还有另一个问题:更新字符串:
edit_string=“Drake ft.DJ Khalid,Nicki Minaj-”为什么选择未来”(官方视频)
实际结果是:
Drake x Khalid x Nicki Minaj x Future x DJ Khalid
yer
替换为
yer=”(?I)\\b'+str(说唱歌手姓名)+“\\b”
…并将
new\u title.append(yer)
替换为
new\u title.append(rapper\u name)
不起作用(例如,yer value=(?i)\b['Freddie Gibbs']\b),我也测试了b'string'作为字节/编码,结果是相同的,你在b's字体中缺少了一个额外的
\
。复制并粘贴我所拥有的。这是
\\b
祝福大家
import re

edit_string = "Drake ft. DJ Khalid, Nicki Minaj - "Why Futures " (Official video)"
rappers_list = ['Drake', 'DJ Khalid', 'Nicki Minaj', 'Future']#open_csv() #list of rapper's nicks

new_title = []
for rapper_name in rappers_list:
    yer = '(?i)\\b'+str(rapper_name)+'\\b'
    if re.findall(yer.lower(), edit_string.lower()): 
        new_title.append(rapper_name)
new_title = ' x '.join(new_title)
print(new_title)
edit_string = new_title  

Output: 
## Drake x DJ Khalid x Nicki Minaj