我正在编写一个python脚本来对我们的Cisco ASA防火墙进行API调用,并且从防火墙返回的信息被放入字典中。然后,我需要解析这个字典,寻找特定的字符串。问题是,有一个键,看起来是一个大值。我插入了一个从防火墙收到的输出示例。
{u'response':[u'object-group network ng-enc-incoming-ftp-outside \ nnetwork-object 1.1.1.1 255.255.255.128 \ n 网络对象主机2.2.2.2 \ n网络对象主机3.3.3.3 \ n 网络对象主机4.4.4.4 \ n网络对象主机5.5.5.5]}
理想情况下,我想搜索此输出以查找特定的IP,如果该IP存在,则会显示一条消息,表明同样的情况。我似乎找不到一个很好的方法来解析一个非常长的值来寻找特定的文本字符串。
答案 0 :(得分:2)
如果您只想知道特定IP是否在响应字符串中,您可以使用in
运算符:
if '2.2.2.2' in resp_dict['response'][0]:
print('Found')
或概括:
ip = '2.2.2.2'
if ip in resp_dict['response'][0]:
print('{} found'.format(ip))
答案 1 :(得分:0)
提取所有IP,然后您可以在列表中搜索特定的IP地址或循环遍历所有IP地址。或者,您可以直接在字符串中搜索@DeepSpace说
import re
d = {u'response': [u'object-group network ng-enc-incoming-ftp-outside\n network-object 1.1.1.1 255.255.255.128\n network-object host 2.2.2.2\n network-object host 3.3.3.3\n network-object host 4.4.4.4\n network-object host 5.5.5.5']}
ip = re.findall(r'(\d+\.\d+\.\d+\.\d+)', d['response'][0])
>>> [u'1.1.1.1', u'255.255.255.128', u'2.2.2.2', u'3.3.3.3', u'4.4.4.4', u'5.5.5.5']
'1.1.1.1' in ip
>>> True
'1.1.1.2' in ip
>>> False