我有一个列表列表,我需要找到并打印包含完全匹配和部分匹配的列表,使用两个忽略大小写的条件。
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']
任何帮助将不胜感激
答案 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']