在Python中查找列表中的部分匹配项

时间:2014-05-20 13:56:03

标签: python list python-2.7

我有一个列表列表,我需要找到并打印包含完全匹配和部分匹配的列表,使用两个忽略大小写的条件。

l = [['2014','127.0.0.1','127','DNS sever Misconfiguration'],['2014','192.168.1.25','529','Failed logon for user user1'],['2014','127.0.0.1','1','This is a test message']]

条件1和2可以是任何东西,即' 192.186.1.25'或者'失败'

>>> for i in l:
        if 'condition 1' in i and 'condition2' in i:
           print i

给......没什么

我只能使用一个具有完全匹配并获得结果的条件

>>> for i in l:
      if '127.0.0.1' in i:
        print i


['2014', '127.0.0.1', '127', 'DNS sever Misconfiguration']
['2014', '127.0.0.1', '1', 'This is a test message']

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

'condition 1' in i

将搜索字符串文字 'condition 1'。相反,我认为你的意思是搜索 name condition1引用的对象,即:

condition1 in l

如果您想要“部分”匹配,请使用or

if condition1 in l or condition2 in l:

any()

if any(cond in l for cond in (condition1, condition2)):

答案 1 :(得分:1)

我的猜测是,你只是没有正确匹配第二个条件,例如如果你做这样的事情:

'127.0.0.1' in i and 'Misconfiguration' in i

但是i看起来像:

['2014', '127.0.0.1', '127', 'DNS sever Misconfiguration']

然后'127.0.0.1'将在i,但'Misconfiguration'赢了 - 因为它是一个列表,而in列表是完全匹配的,但是你要找的是i元素的子串。如果这些是一致的,您可以执行以下操作:

'127.0.0.1' in i and 'Misconfiguration' in i[3]

或者如果他们不是,你必须检查所有条目:

'127.0.0.1' in i and any('Misconfiguration' in x for x in i)

应该这样做。这会对i中的每个项目进行子字符串检查以查找搜索字词。

答案 2 :(得分:0)

这是我的尝试:

l = [['2014','127.0.0.1','127','DNS sever Misconfiguration'],    ['2014','192.168.1.25','529','Failed logon for user user1'],['2014','127.0.0.1','1','This is a test message']]

condition1 = 'Failed'
condition2 = '2014'

for lst in l:
    found_cond1 = False
    found_cond2 = False
    for string in lst:
        if condition1 in string:
            found_cond1 = True
        if condition2 in string:
            found_cond2 = True
        if found_cond1 and found_cond2:
            print(lst)
            break

给出

['2014', '192.168.1.25', '529', 'Failed logon for user user1']