首页 > 解决方案 > 如何在子行中搜索特定单词。如果找到匹配,则返回父子行

问题描述

在下面的数据中找到“10.10.10.1”,如果找到匹配,则返回其父行“ip access-list extended test2”和匹配行“permit ip host 10.10.10.1 any log”

输入:数据列表=

ip access-list extended test2 10.10.10.1
ip access-list extended test1
 deny   tcp any eq tacacs any
 permit ip any any
ip access-list extended test2
 permit ip any any
 permit ip host 10.10.10.1 any log
 permit icmp host 10.10.10.1 any
 permit tcp any any eq 22
 permit tcp any any eq tacacs
 permit tcp any any
 permit udp any any
ip access-list extended test3
 permit udp any any eq 123 log
 permit udp any any eq 1234 log
 permit ip any any

输出应该是:

ip access-list extended test2
 permit ip host 10.10.10.1 any log

这是我尝试过的,但我只能返回匹配行我不知道如何匹配父行

final_list = []
    for LINE in data_list:
    if re.search(r'\b{}\b'.format('10.10.10.1'), LINE):
        final_list.append(LINE)
    print(final_list)

标签: pythonpython-3.xregex

解决方案


据我所见,我们可以在没有正则表达式的情况下做到这一点,假设parent line你的意思是以 . 开头的行ip access-list

parent_line = None

# data being the input string
for line in data.splitlines():
    if line.startswith('ip access-list'):
        parent_line = line
    elif '10.10.10.1' in line:
        print(parent_line)
        print(line)

它打印:

ip access-list extended test2
permit ip host 10.10.10.1 any log

如果父行和子行需要在开头基于空格来识别,则此代码将需要非常小的更改。


推荐阅读