【发布时间】:2011-09-28 11:41:31
【问题描述】:
我正在尝试使用正则表达式和列表理解来清除包含 "msi" 的字符串。但是,当我打印列表时,包含 "msi" 的字符串仍在列表中。错误究竟是什么?这是我的代码:
spam_list = [l for l in spam_list if not re.match("msi", l)]
【问题讨论】:
-
最好不要使用
list作为变量名,因为它会影响内置函数
我正在尝试使用正则表达式和列表理解来清除包含 "msi" 的字符串。但是,当我打印列表时,包含 "msi" 的字符串仍在列表中。错误究竟是什么?这是我的代码:
spam_list = [l for l in spam_list if not re.match("msi", l)]
【问题讨论】:
list 作为变量名,因为它会影响内置函数
re.match() 从字符串的开头匹配。使用re.search(),或者更好的是in。
L = [l for l in L if "msi" not in l]
【讨论】:
r".*\.(msi|exe||jgp)" 会更安全。
由于您显然是在查看文件名列表,因此您也可以使用 endwith:
list = [l for l in list if l.endswith('.msi')]
【讨论】:
这是一种按文件扩展名过滤列表的方法
import os
extensions = set(['.msi', '.jpg', '.exe'])
L = [l for l in L if os.path.splitext(l)[1] not in extensions]
【讨论】:
extensions = {'.msi', '.jpg', '.exe'}