Python:搜索和替换 - 字符串描述问题

时间:2015-01-26 14:53:29

标签: python string python-2.7 search

尝试查找并替换字符串列表(由新行分隔),例如

aba
abanga
abaptiston
abarelix

使用像

这样的列表
aba
aca
ada

这样,如果第二个列表中的项目出现在第一个列表中,则应将其删除。

我有一半的代码

def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text

with open("words.txt", "r") as f:
    content = f.readlines()

str = ''.join(str(e) for e in content)  #list may include numbers

delet = {"aba":"", "aca":"", "ada":"",}
txt = replace_all(str, delet)

f = open("deltedwords.txt","w") 
f.write(txt)

不幸的是,这会捕获部分字符串的误报,因此最终结果将是

nga
ptiston
relix

尝试在被搜索的单词之前添加空格或其他字符并不起作用,因为它往往只会产生漏报。

2 个答案:

答案 0 :(得分:1)

你可以简单地过滤,但我认为如果你只是删除条目就不需要字典。

如果订单无关紧要,请使用set

>>> content = set(['aba', 'abanga', 'abaptiston', 'abarelix'])
>>> unwanted_words = set(['aba', 'aca', 'ada'])
>>> content.difference(unwanted_words)
set(['abanga', 'abarelix', 'abaptiston'])

如果是,请使用列表理解

>>> content = ['aba', 'abanga', 'abaptiston', 'abarelix']
>>> unwanted_words = ['aba', 'aca', 'ada']
>>> [word for word in content if word not in unwanted_words]
['abanga', 'abaptiston', 'abarelix']

答案 1 :(得分:1)

如何使用:

content_without_keywords = filter(lambda x: x.strip() not in delet.keys(), content)
txt = ''.join(str(e) for e in content_without_keywords)

仅删除完全匹配的行。