如果匹配列表,我试图从字符串中删除单词。
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
我希望它删除所有与列表匹配的字词。
答案 0 :(得分:12)
您没有保留x.replace()
的结果。请尝试以下方法:
for tag in tags:
x = x.replace(tag, '')
print x
请注意,您的方法匹配任何子字符串,而不仅仅是完整的字词。例如,它会删除LOL
中的RUN LOLA RUN
。
解决此问题的一种方法是将每个标记括在一对r'\b'
字符串中,并查找生成的regular expression。 r'\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)
使用变量tags
和x
,您可以使用:
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, '')