Python регулярное выражение находит только один элемент в списке, не все - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть небольшой 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))

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Как упомянуто @DaveStSomeWhere, файл должен быть сброшен в его начальное положение в каждом l oop, если не читаются данные файла.

Итак, вы можете прочитать содержимое файла в переменную и посмотреть в нем, чтобы найти совпадение.

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 голос
/ 30 апреля 2020

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...