Python findall - 忽略一些结果

问题描述 投票:0回答:1

我正在开展一项计划,将来会解读YouTube视频的搜索结果。我的代码片段版本旨在从歌曲标题中提取艺术家的假名。

Example

我有一个用字符串保存的标题:“Drake ft.DJ Khalid,Nicki Minaj - 'Why Futures'(官方视频)”,我想忽略'期货'一词的findall功能(因为它是主打歌的一部分,这不是说唱歌手/艺术家的昵称,这是'和'字符之间。另外我有'DJ Khalid'的问题因为findall返回两个说唱歌手(DJ Khalid和Khalid)而不是一个昵称(应该是同一个DJ Khalid) )。

Code

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

Results

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

应该是:Drake x DJ Khalid x Nicki Minaj

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

python regex python-3.x findall
1个回答
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  
© www.soinside.com 2019 - 2024. All rights reserved.