Нахождение термина в списке

1

У меня есть следующий код, чтобы найти ключевые слова в профиле пользователя:

    profile_text = self.text.lower()
    term_string = ''
    TERMS = ['spring',  'java', 'angular', 'elastic', 'css']
    for term in TERMS:
        if term in profile_text: term_string += term.strip() + ', '
    return term_string.strip(' ,')

Это вернет что-то вроде:

"spring, angular, css"

Однако он также вернет "java", если у пользователя есть слово, такое как "javascript". Что было бы хорошим примером для предотвращения этого?

  • 0
    Думаю, поможет раскрыть, что такое profile_text
  • 0
    Я полагаю, что есть два способа сделать это: один использует регулярные выражения , другой ставит пробелы перед и после слов, которые вы хотите сопоставить, чтобы он совпадал только с разделенными словами: TERMS = ['spring ', 'java ', 'angular ', 'elastic ', 'css ']
Показать ещё 2 комментария
Теги:

1 ответ

3
Лучший ответ

Вы должны использовать регулярные выражения.

Вы могли бы сделать что-то вроде:

import re

TERMS = ['spring',  'java', 'angular', 'elastic', 'css']
matched_terms = []
for term in TERMS:
    if re.search(r'\b{}\b'.format(term), profile_text, re.M):
        matched_terms.append(term)
return ', '.join(matched_terms)
  • 0
    Добавьте (?i) в начало регулярного выражения, иначе оно не будет соответствовать "Spring" или "Java"
  • 0
    Я действительно предполагал, что он хочет, чтобы он чувствителен к регистру ... но если он хочет, чтобы он чувствителен к регистру, то ему нужно просто добавить флаг re.I .... аргумент flags тогда станет re.M | re.I

Ещё вопросы

Сообщество Overcoder
Наверх
Меню