#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}
три раза
Если утверждение истинно, то сопоставьте всю строку с .