Python正则表达式没有给出预期的结果

时间:2011-02-02 16:08:53

标签: python list for-loop

尝试在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']

当我只期待第一个元素时。

任何建议都非常感谢。

3 个答案:

答案 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()代替正则表达式,除非你的代码中的正则表达式只是一个更复杂的例子。