Сравните список со строкой в Python и выделите совпадения

#python #list #compare #string-formatting

#python #Список #Сравнить #форматирование строки

Вопрос:

Я пытаюсь сравнить список Python со строкой и выделить совпадения с меткой внутри новой строки. Но это не сработает. Следующий пример:

 my_string = 'This is my string where i would find matches of my List'
my_list = ['THIS IS', 'WOULD FIND', 'BLA', 'OF MY LIST']
result_that_i_need = '<mark>This is</mark> my string where i <mark>would find</mark> matches <mark>of my List</mark>'
  

Есть ли у кого-нибудь идеи, как это решить? Кто-нибудь может мне помочь, пожалуйста?

Я попробовал следующее:

 my_string = 'This is my string where i would find matches of my List'
my_string_split = string.split()

my_list = ['This is', 'would find', 'bla', 'of my List']
input_list=[]
for my_li in my_list:
    if my_li in my_string:
        input_list.append(my_li)

input_list_join = " ".join(input_list)

new_list = []

for my_string_spl in my_string_split:
    if my_string_spl in input_list_join:
        new_list.append('<mark>'  my_string_spl   '</mark>')
    else:
        new_list.append(my_string_spl)

result = " ".join(new_list)
print(result)
  

Комментарии:

1. Пожалуйста, добавьте свою попытку решения этой проблемы.

2. возможно, вы не захотите вызывать свой список и строку list и string

3. Спасибо pygeek и Крису, я изменил код

Ответ №1:

Может быть, что-то вроде этого:

 my_string = 'This is my string where i would find matches of my List'
my_list = ['This is', 'would find', 'bla', 'of my List']

result = my_string
for match in my_list:
  if match in my_string:
    result = result.replace(match, '<mark>'   match   '</mark>')

print(result)
  

Вывод:

 <mark>This is</mark> my string where i <mark>would find</mark> matches <mark>of my List</mark>
  

Комментарии:

1. Большое вам спасибо, я также попробовал это решение, но если my_list также содержит, например, ‘is my’, результат не будет показан, потому что первое совпадение было ‘This is’ и было заменено на <mark>This is</mark> -> теперь ‘my’ стоит отдельно и не предлагает совпадения с ‘is my’… вы понимаете, что я имею в виду?

2. Да, я понимаю. Если у вас есть перекрывающиеся совпадения в my_list , возможно, вы можете попробовать сначала объединить их, а затем попробовать вышеуказанный метод, например, повторить my_list и проверить, совпадает ли конец одного совпадения с началом другого, таким образом, ['This is', 'is my', 'foo'] станет ['This is my', 'foo'] .

3. @PApostol Это не совсем правильно. Вам нужно будет убедиться, что подстрока также не присутствует независимо в другой части строки большего размера.

4. Кроме того, ваш оператор if не нужен.

5. @pygeek верно, но не так просто. Что, если у вас есть ['Hello nice person', 'nice'] и ваша строка Hello nice person, it is nice to meet you ?