Фильтр, созданный с помощью Regex, не может быть нацелен на более чем одно слово за раз (Django 2.1.5) - PullRequest
0 голосов
/ 23 мая 2019

У меня есть собственный фильтр, который выделяет ключевые слова, которые пользователь вставил в строку поиска (как в поиске Google). Однако, на данный момент, это только выделяет последнее слово ключевых слов. Например, если ключевыми словами являются «Американская киноиндустрия», будет выделена только «индустрия». Но я хочу, чтобы все три слова были выделены, когда и где бы они ни находились на веб-странице (даже если они не рядом друг с другом). Чтобы рассматривать строку ключевых слов как отдельные слова, я разделил ключевые слова:

def highlight(value, search_term, autoescape=True):
    search_term_list = search_term.split()
    search_term_word = ''
    for search_term_word in search_term_list:
        pattern = re.compile(re.escape(search_term_word), re.IGNORECASE)
        new_value = pattern.sub('<span class="highlight">\g<0></span>', value)
    return mark_safe(new_value)

Есть идеи, почему фильтр выделяет только последнее слово и как заставить код работать?

1 Ответ

0 голосов
/ 23 мая 2019

Вот альтернатива предлагаемому решению от @ WiktorStribiżew

# import re

def highlight(value, search_term):
    pattern = r'{}'.format(search_term.replace(' ', '|'))
    return re.sub(pattern, '<span class="highlight">\g<0></span>', value)

highlight('Hello one world', 'one world')
# 'Hello <span class="highlight">one</span> <span class="highlight">world</span>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...