Python regex在列表中只找到一个项目,而不是全部。

问题描述 投票:0回答:1

我有一个小的Python脚本,它调用一个配置文件和一个列表.列表被用作搜索配置文件的模式.列表只是IP地址,脚本运行,但它只找到列表中的第一个IP,它没有通过每个步骤来搜索配置。

谁能告诉我我缺少了什么?我试着调用一个函数,但它仍然只找到列表中的第一个IP。

import re
list=['10.100.81.118',
'10.100.81.113',
'10.100.81.112',
'10.100.81.117',
'10.100.81.9',
'10.100.81.116',
'10.100.81.114',
'10.100.81.115',
'10.100.81.111',
'10.100.81.10',
'10.100.81.1']

config=open('show_run.txt','r')

for items in list:
    for answers in config:
        re2 = re.findall(items, answers, re.MULTILINE)
        if re2:
            print('\n'.join(re2))
python regex
1个回答
1
投票

正如@DaveStSomeWhere所提到的,如果不读取文件数据,则需要在每次循环中重置文件到初始位置。

所以,你可以做的是将文件内容读到一个变量中,然后在该变量中寻找匹配。

import re
ip_list=['10.100.81.118', '10.100.81.113', '10.100.81.112',
'10.100.81.117', '10.100.81.9', '10.100.81.116',
'10.100.81.114', '10.100.81.115', '10.100.81.111',
'10.100.81.10', '10.100.81.1']

config= open('show_run.txt', 'r')
configdata = config.read()

for items in ip_list:
    re2 = re.findall(items, configdata, re.MULTILINE)
    if re2:
        print('\n'.join(re2))

或者干脆你可以不用re模块来做。

for items in ip_list:
    if items in configdata:
        print('\n'.join(items))

1
投票

Regex实际上可以帮助你同时搜索列表中的所有项目。

import re
my_list = ['10.100.81.118', '10.100.81.113', '10.100.81.112',
         '10.100.81.117', '10.100.81.9', '10.100.81.116',
         '10.100.81.114', '10.100.81.115', '10.100.81.111',
         '10.100.81.10', '10.100.81.1']

pattern = r'({})'.format('|'.join(my_list))
print (pattern)

example1 = 'this is an ip address: 10.100.81.9 10.100.81.9 and this is another: 10.100.81.113'
example2 = 'this is an ip address: 10.100.81.10 and this is another: 10.100.81.113'
config = [example1, example2]

for answers in config:
    res = re.findall(pattern, answers)
    print (res)
© www.soinside.com 2019 - 2024. All rights reserved.