2015-03-28 8 views
-3

у меня есть список строк (цветы), скажетКак удалить подстроку из строки на основе списка строк

l = ['chocolate brown','brown','chocolate'] 

У меня есть строка:

sentence = "The jeans is chocolate brown in color and has brown colored pockets" 

я должен удалить chocolate brown и brown из строки. Это просто пример. В основном, когда я сталкиваюсь с цветом в строке, я должен удалить его, если он существует в списке цветов. Каков эффективный способ сделать это?

Один из подходов, который, как я думал, состоял в том, чтобы разделить строку на триграммы, битрамы и униграммы. Но объединение этих n-граммов назад и последовательно между всеми n-граммами было бы проблемой.

Мой первоначальный список слишком велик, а строка коротка. Мне нужно эффективное решение, так как я должен перебирать все элементы списка. Возможно ли, если бы я мог проверить строку для цвета, а затем проверить, включен ли этот цвет в список. Разве это не было бы эффективным решением?

+0

около того шоколада остается в списке? –

+0

Наконец, строка должна быть «Джинсы в цвете и имеют цветные карманы». – blackmamba

+0

'Мне нужно удалить шоколадный коричневый и коричневый из списка. 'полностью отличается от приведенного выше комментария. –

ответ

2
l = ['chocolate brown','brown', 'chocolate'] 

sentence = "The jeans is chocolate brown in color and has brown colored pockets" 

for word in l: 
    # "word + ' '" is for deleting the trailing whitespace after each color word. 
    sentence_new = sentence.replace(word + ' ', '') 
    sentence = sentence_new 

print(sentence) 

Выход:

The jeans is in color and has colored pockets 

В основном только заменить то, что вы не хотите, что вы хотите (я использовал пустую строку «»), и поместить это действие в цикле.

Обратите внимание, что replace() возвращает новую строку вместо изменения исходной строки, поэтому вы должны поместить ее в новую переменную, например str_new.

+0

Вы могли бы предоставить полный код? –

+0

@Akavall Спасибо за комментарий. Я изменил его соответствующим образом. –

+0

@ AvinashRaj Полный код, указанный выше. –

2

Вы можете использовать re:

>>> import re 
>>> l = ['chocolate brown','brown','chocolate'] 
>>> s = "The jeans is chocolate brown in color and has brown colored pockets" 
>>> 
>>> re.sub('|'.join(re.escape(r) for r in l), '', s) 
'The jeans is in color and has colored pockets'