Python findall - игнорируя некоторые результаты - PullRequest
0 голосов
/ 20 апреля 2019

Я занимаюсь программой, которая в будущем будет интерпретировать результаты поиска видео с YouTube. Моя отрывочная версия кода предназначена для извлечения псевдонимов исполнителей из названия песни.

Пример

У меня есть название, сохраненное в строке: "Drake ft. DJ Khalid, Nicki Minaj - 'Why Futures' (Официальное видео)" * , и я хотел бы игнорировать слово '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 Ответ

1 голос
/ 21 апреля 2019

Кредит @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  
...