删除列表中不包含正则表达式字符串的所有项目

时间:2012-07-07 23:34:10

标签: python regex list iteration

是否可以删除列表中不包含正则表达式字符串的所有项目?

我在考虑可能只返回一个正则表达式字符串,如果没有,则将列表项设置为空,然后再次遍历列表以删除所有空条目,但这似乎效率低下。

有什么想法吗?

例如,假设我有:

["cat", "dog", "monkey", "Fred", "sad"]

我写了一个只选择悲伤的正则表达式。我希望所有其他人(最好)被删除。

2 个答案:

答案 0 :(得分:8)

最简单的方法是使用列表解析构建一个新列表:

regex = re.compile(...)
new_list = [s for s in old_list if regex.match(s)]

或使用filter()

new_list = filter(regex.match, old_list)

答案 1 :(得分:1)

import re
filters       = ['^sad', '^.*ed$']
expressions   = [re.compile(x) for x in filters]
words         = ['cat', 'dog', 'monkey', 'fred', 'sad', 'saddening']
filtered_list = [s for s in words if any(re.match(s) for re in expressions)]

输出:

['fred', 'sad', 'saddening']