Python findall-忽略一些结果

时间:2019-04-20 12:58:58

标签: python regex python-3.x findall

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

示例

我有一个保存在字符串中的标题:“ Drake ft。DJ Khalid,Nicki Minaj-'Why Futures'(官方视频)“ ,我想忽略 findall 函数(因为它是标题歌曲的一部分,而不是说唱歌手/艺术家的昵称),它位于'和'字符之间。 另外,我对“ DJ Khalid”有疑问,因为 findall 返回了两个缺口的说唱歌手(DJ Khalid和Khalid),而不是一个缺口(应该是同一DJ Khalid)。

代码

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

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

结果

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

应为:Drake x DJ Khalid x Nicki Minaj

如何以最佳方式(最佳优化)进行操作?预先感谢您的所有帮助。

1 个答案:

答案 0 :(得分:1)

使用@FailSafe进行模式注册。 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  
相关问题