вывести список допустимых записей файла журнала в Python 3 regex

#regex #python-3.x #list #iteration #match

#регулярное выражение #python-3.x #Список #итерация #совпадение

Вопрос:

Я новичок в Python. Я хочу открыть файл logs.txt и сопоставьте все IP-адреса в каждой строке (запись журнала).

Затем я бы напечатал количество записей журнала с IP-адресом. что у меня есть на данный момент:

 import re
#read the file
file = open("logile.txt")
lineList = []
for line in file:
    match = re.search( r'^d{1,3}.d{1,3}.d{1,3}.d{1,3}', line )
    if match:
        print("IP found in this line is:  ", match.group())
  

Теперь я хочу напечатать количество записей журнала с этими IP-адресами. Как мне добавить каждую строку с IP в мой LineList и вывести количество?

Комментарии:

1. И в чем ваш вопрос?

2. Последняя строка моего поста @DYZ

3. Я отредактировал 😄

Ответ №1:

 import re
file = open("logfile.txt")
lineList = []
count = 0
for ln, line in enumerate(file):
    match = re.search( r'^d{1,3}.d{1,3}.d{1,3}.d{1,3}b', line )
    if match:
        count  = 1
        print("Match #{}: IP found in line {} is: {}".format(count, ln 1, match.group()))
        lineList.append(match.group())
  

Обратите внимание на дополнительные обратные косые черты и привязку к границе слова в вашем регулярном выражении, чтобы предотвратить ложные совпадения. Кроме того, из-за ^ привязки регулярное выражение будет соответствовать только IP-адресам в начале строки.

Комментарии:

1. привет, @Tim ошибка: SyntaxError: недопустимый синтаксис — LineList.append(match.group())

2. Ах да, в предыдущей строке не хватало ) .

Ответ №2:

Вы можете использовать положительный предварительный просмотр, чтобы подтвердить, присутствует ли IP в строке:

 (?=.*d{1,3}(?:.d{1,3}){3}.*). 
  

Объяснение:

(?=...) — позитивный прогноз

.* — сопоставить ноль или более любых символов

d{1,3} — сопоставьте 1 с тремя цифрами

(?:...) — группа без захвата

.d{1,3} — сопоставьте точку буквально и от одной до трех цифр

(?:.d{1,3}){3} — совпадение .d{1,3} три раза

Если утверждение истинно, то сопоставьте всю строку с .

ДЕМОНСТРАЦИЯ