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

Cec*_*uez 1 python regex iteration list

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

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

有什么想法吗?

例如,假设我有:

["cat", "dog", "monkey", "Fred", "sad"]
Run Code Online (Sandbox Code Playgroud)

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

Sve*_*ach 9

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

regex = re.compile(...)
new_list = [s for s in old_list if regex.match(s)]
Run Code Online (Sandbox Code Playgroud)

或者,使用filter():

new_list = filter(regex.match, old_list)
Run Code Online (Sandbox Code Playgroud)