如何根据字符串列表从字符串中删除子字符串

时间:2015-03-28 16:28:15

标签: python string

我有一个字符串(颜色)列表,比如说

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

我有一个字符串:

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

我必须从字符串中删除chocolate brownbrown。这只是一个例子。基本上每当我遇到字符串中的颜色时,如果它存在于颜色列表中,我必须将其删除。有效的方法是什么?

我认为的一种方法是将字符串分成三字母,双字母和单字符串。但是,在所有n-gram之间加入这些n-gram将是一个问题。

我的原始列表太大而字符串很短。我需要一个有效的解决方案,因为我必须循环遍历列表的所有元素。是否可以检查字符串中的颜色,然后检查该颜色是否在列表中。这不是一个有效的解决方案吗?

2 个答案:

答案 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。

答案 1 :(得分: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'