尝试在python 2.5.4中的列表上进行正则表达式搜索 - 示例代码:
import re
list_in = ['heti_abcd_xyz_1234', 'heti_abcd_xyz', 'heti_abcd']
en = re.compile('abcd_xyz_1234$')
for item in list_in:
if en.search(item) is None:
list_in.remove(item)
print list_in
结果然而我得到了:
['heti_abcd_xyz_1234', 'heti_abcd']
当我只期待第一个元素时。
任何建议都非常感谢。
答案 0 :(得分:7)
您在迭代时修改列表。你不能这样做。
答案 1 :(得分:3)
它可以简单得多:
>>> list_in = ['heti_abcd_xyz_1234', 'heti_abcd_xyz', 'heti_abcd']
>>> [x for x in list_in if x.endswith("abcd_xyz_1234")]
['heti_abcd_xyz_1234']
如果你想要一个适用于任意正则表达式的解决方案,你可以这样做:
pattern = re.compile("your_regex")
new_list = [x for x in list_in if pattern.search(x)]
答案 2 :(得分:2)
迭代时,您无法修改列表。只需创建一个新的:
import re
list_in = ['heti_abcd_xyz_1234', 'heti_abcd_xyz', 'heti_abcd']
en = re.compile('abcd_xyz_1234$')
new_list = [item for item in list_in if en.search(item) is not None]
print new_list
顺便说一下,使用.endswith()
代替正则表达式,除非你的代码中的正则表达式只是一个更复杂的例子。