Как я могу исключить другие совпадения с этим регулярным выражением? - PullRequest
0 голосов
/ 01 августа 2020

Регулярное выражение ниже (ip_regex) найдет ВСЕ IP-адреса, но есть длинный список IP-адресов, которым я не хочу соответствовать. Например, мне нужно отфильтровать частные IP-адреса вместе с другими IP-адресами publi c. Как я могу добавить к этому регулярному выражению, чтобы выполнить sh this?

    import re
    fh = "some file.txt"
    fh2 = "some file2.txt"
    ip_regex = re.compile(r"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})")
    
    for line in fh:
        line = line.strip()
        match = ip_regex.findall(line)
        if match:
            for (ip) in match:
                print('\n'.join(match), file=fh2)
        else:
            pass

1 Ответ

0 голосов
/ 01 августа 2020

Я рекомендую вам использовать переменную ìp для построения объекта IPAddress[1]. Затем вы можете вызвать для него метод isPrivate() или спросить, содержится ли он в IPv4Network. Это было бы немного более подробным, но общее регулярное выражение, исключающее случайные подсети, заканчивалось бы менее читаемым кодом.

В модифицированном фрагменте я также изменил одну строку, которая мне кажется ошибкой (это там комментируется).

import re
from ipaddress import IPv4Address
fh = 'ips.txt'
fh2= open ('filtereds.txt', 'w')
ip_regex = re.compile(r"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})")

with open (fh, "r") as myfile:
    data=myfile.readlines()
    for line in data:
        line = line.strip()
        match = ip_regex.findall(line)
        if match:
            for (ip) in match:
                ipaddress = IPv4Address(ip)
                if ipaddress.is_global: # and other criterias
                    # print('\n'.join(match), file=fh2) this would print all the line (with other IPs that does not fit criteria)
                    print(ip, file=fh2) #this would print only the matched IP
        else:
            pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...