如果匹配项列表中的项目,则替换字符串中的项目

时间:2012-02-22 14:01:48

标签: python list replace

如果匹配列表,我试图从字符串中删除单词。

x = "How I Met Your Mother 7x17 (HDTV-LOL) [VTV] - Mon, 20 Feb 2012"

tags = ['HDTV', 'LOL', 'VTV', 'x264', 'DIMENSION', 'XviD', '720P', 'IMMERSE']

print x

for tag in tags:
    if tag in x:
        print x.replace(tag, '')

它产生这个输出:

How I Met Your Mother 7x17 (HDTV-LOL) [VTV] - Mon, 20 Feb 2012
How I Met Your Mother 7x17 (-LOL) [VTV] - Mon, 20 Feb 2012
How I Met Your Mother 7x17 (HDTV-) [VTV] - Mon, 20 Feb 2012
How I Met Your Mother 7x17 (HDTV-LOL) [] - Mon, 20 Feb 2012

我希望它删除所有与列表匹配的字词。

4 个答案:

答案 0 :(得分:12)

您没有保留x.replace()的结果。请尝试以下方法:

for tag in tags:
    x = x.replace(tag, '')
print x

请注意,您的方法匹配任何子字符串,而不仅仅是完整的字词。例如,它会删除LOL中的RUN LOLA RUN

解决此问题的一种方法是将每个标记括在一对r'\b'字符串中,并查找生成的regular expressionr'\b'只会在字边界处匹配:

for tag in tags:
    x = re.sub(r'\b' + tag + r'\b', '', x)

答案 1 :(得分:6)

方法str.replace()不会更改字符串 - 字符串在Python中是不可变的。您必须在每次迭代中将x绑定到replace()返回的新字符串:

for tag in tags:
    x = x.replace(tag, "")

请注意if语句是多余的;如果找不到匹配项,str.replace()将不会执行任何操作。

答案 2 :(得分:3)

使用变量tagsx,您可以使用:

output = reduce(lambda a,b: a.replace(b, ''), tags, x)

返回:

'How I Met Your Mother 7x17 (-) [] - Mon, 20 Feb 2012'

答案 3 :(得分:1)

(1)x.replace(tag, '')不会修改x,而是会返回 new 字符串。

(2)为什么要在每次迭代时打印?

您可以做的最简单的修改是:

for tag in tags:
     x = x.replace(tag, '')